Гость
Map
Форумы / Просто Трёп [закрыт для гостей] / А можно как-то запросом получить ? MS SQL / 25 сообщений из 201, страница 2 из 9
24.04.2023, 20:28
    #369903
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
IT-Клоп  24.04.2023, 20:24
[игнорируется]
Гарыныч  24.04.2023, 20:21
[игнорируется]
IT-Клоп  24.04.2023, 20:16
[игнорируется]
Гарыныч  24.04.2023, 20:12
[игнорируется]
IT-Клоп  24.04.2023, 20:08
[игнорируется]
...
покажи как :))))
Код: SQL
1.
SELECT increase_font(20) FROM DUAL;
куды пихать в акцесе?
такие вопросы задаёшь, что даже неудобно...
понятно, опять тролишь?
...
дед-пердед
Рейтинг: 0 / 0
24.04.2023, 20:30
    #369909
cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гесты и игнорируемые идут по CSS
А можно как-то запросом получить ? MS SQL
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE TABLE [dbo].[t](
  [id] [int] NULL,
  [name] varchar(5) NULL,
  [time] varchar(5) NULL
)

insert into t (id, [name], [time])
select 1, 'aaa', '08:00'
union
select 2, 'bbb', '09:00'
union
select 3, 'aaa', '08:52'
union
select 4, 'aaa', '10:00'
union
select 5, 'bbb', '11:00'
union
select 6, 'bbb', '10:00'

go
select [name],
(select top 1 id from t where  [name] = t0.[name] order by [time] ) id1,
min([time]) as mintime,
(select top 1 id from t where  [name] = t0.[name] order by [time] desc ) id2,
max([time]) as maxtime

from t as t0
group by name
go
drop table t
name id1 mintime id2 maxtime
aaa 1 08:00 4 10:00
bbb 2 09:00 5 11:00
...
Рейтинг: 3 / 0
Нравится: eNose, Гарыныч, Ифрит
24.04.2023, 20:33
    #369916
Огрищще
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Улыбайтесь - это всех раздражает.©
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 19:15
[игнорируется]
Из такой таблицы
id name time
1 aaa 08:00
2 bbb 09:00
3 aaa 08:52
4 aaa 10:00
5 bbb 11:00
6 bbb 10:00
Такой результат
name id1 mintime id2 maxtime
aaa 1 08:00 4 10:00
bbb 2 09:00 5 11:00
То есть получить не только минимальное и максимальное время для каждого name, но и id записи.

Есть тут еще не пропившие мозг базоёбы?
можно
...
Рейтинг: 0 / 0
24.04.2023, 20:34
    #369919
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
cat2  24.04.2023, 20:30
[игнорируется]
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE TABLE [dbo].[t](
  [id] [int] NULL,
  [name] varchar(5) NULL,
  [time] varchar(5) NULL
)

insert into t (id, [name], [time])
select 1, 'aaa', '08:00'
union
select 2, 'bbb', '09:00'
union
select 3, 'aaa', '08:52'
union
select 4, 'aaa', '10:00'
union
select 5, 'bbb', '11:00'
union
select 6, 'bbb', '10:00'

go
select [name],
(select top 1 id from t where  [name] = t0.[name] order by [time] ) id1,
min([time]) as mintime,
(select top 1 id from t where  [name] = t0.[name] order by [time] desc ) id2,
max([time]) as maxtime

from t as t0
group by name
go
drop table t
name id1 mintime id2 maxtime
aaa 1 08:00 4 10:00
bbb 2 09:00 5 11:00
супер!!!! Кот2 - шикарен!
...
дед-пердед
Рейтинг: 0 / 0
24.04.2023, 20:35
    #369921
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
cat2  24.04.2023, 20:30
[игнорируется]
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
select [name],
(select top 1 id from t where  [name] = t0.[name] order by [time] ) id1,
min([time]) as mintime,
(select top 1 id from t where  [name] = t0.[name] order by [time] desc ) id2,
max([time]) as maxtime

from t as t0
group by name
...
дед-пердед
Рейтинг: 0 / 0
24.04.2023, 20:36
    #369923
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
Гарыныч  24.04.2023, 20:34
[игнорируется]
cat2  24.04.2023, 20:30
[игнорируется]
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE TABLE [dbo].[t](
  [id] [int] NULL,
  [name] varchar(5) NULL,
  [time] varchar(5) NULL
)

insert into t (id, [name], [time])
select 1, 'aaa', '08:00'
union
select 2, 'bbb', '09:00'
union
select 3, 'aaa', '08:52'
union
select 4, 'aaa', '10:00'
union
select 5, 'bbb', '11:00'
union
select 6, 'bbb', '10:00'

go
select [name],
(select top 1 id from t where  [name] = t0.[name] order by [time] ) id1,
min([time]) as mintime,
(select top 1 id from t where  [name] = t0.[name] order by [time] desc ) id2,
max([time]) as maxtime

from t as t0
group by name
go
drop table t
name id1 mintime id2 maxtime
aaa 1 08:00 4 10:00
bbb 2 09:00 5 11:00
супер!!!! Кот2 - шикарен!
и суперприз от Иноза уходит Коту2!!!, мана
...
дед-пердед
Рейтинг: 0 / 0
24.04.2023, 21:43
    #370014
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
Дед-Папыхтет  24.04.2023, 20:07
[игнорируется]
select ...
from (
lag/lead(id/time) over (partition by name order by id) lagid
) T
where lagid is not null
Может FIRST_VALUE и LAST_VALUE ?
Мне надо максимум и минимум и айдишники этих строк.
...
Рейтинг: 0 / 0
24.04.2023, 21:44
    #370017
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
Запрос Кота2 это понятно, но хочу без подзапросов
...
Рейтинг: 0 / 0
24.04.2023, 21:45
    #370018
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 21:43
[игнорируется]
Дед-Папыхтет  24.04.2023, 20:07
[игнорируется]
select ...
from (
lag/lead(id/time) over (partition by name order by id) lagid
) T
where lagid is not null
Может FIRST_VALUE и LAST_VALUE ?
Мне надо максимум и минимум и айдишники этих строк.
а чем вариант кот2 не устроил?
...
дед-пердед
Рейтинг: 0 / 0
24.04.2023, 21:46
    #370020
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 21:44
[игнорируется]
Запрос Кота2 это понятно, но хочу без подзапросов
ну тогда продолжай хотеть :))) по Папыху
...
дед-пердед
Рейтинг: 0 / 0
24.04.2023, 21:53
    #370027
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
Гарыныч  24.04.2023, 21:45
[игнорируется]
eNose  24.04.2023, 21:43
[игнорируется]
Дед-Папыхтет  24.04.2023, 20:07
[игнорируется]
select ...
from (
lag/lead(id/time) over (partition by name order by id) lagid
) T
where lagid is not null
Может FIRST_VALUE и LAST_VALUE ?
Мне надо максимум и минимум и айдишники этих строк.
а чем вариант кот2 не устроил?
Тем что на самом деле всё несколько сложнее и будет километровый запрос при таком подходе
...
Рейтинг: 0 / 0
24.04.2023, 21:57
    #370035
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 21:53
[игнорируется]
Гарыныч  24.04.2023, 21:45
[игнорируется]
eNose  24.04.2023, 21:43
[игнорируется]
Дед-Папыхтет  24.04.2023, 20:07
[игнорируется]
select ...
from (
lag/lead(id/time) over (partition by name order by id) lagid
) T
where lagid is not null
Может FIRST_VALUE и LAST_VALUE ?
Мне надо максимум и минимум и айдишники этих строк.
а чем вариант кот2 не устроил?
Тем что на самом деле всё несколько сложнее и будет километровый запрос при таком подходе
тогда кури вариант папыха
...
дед-пердед
Рейтинг: 0 / 0
24.04.2023, 21:57
    #370037
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
Гарыныч  24.04.2023, 21:57
[игнорируется]
eNose  24.04.2023, 21:53
[игнорируется]
Гарыныч  24.04.2023, 21:45
[игнорируется]
eNose  24.04.2023, 21:43
[игнорируется]
Дед-Папыхтет  24.04.2023, 20:07
[игнорируется]
...
Может FIRST_VALUE и LAST_VALUE ?
Мне надо максимум и минимум и айдишники этих строк.
а чем вариант кот2 не устроил?
Тем что на самом деле всё несколько сложнее и будет километровый запрос при таком подходе
тогда кури вариант папыха
Да.
Он немного перепутал, но направление правильное.
...
Рейтинг: 0 / 0
24.04.2023, 21:59
    #370040
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
lag lead это предыдущее и следующее в окне.

first_value и last_value - первое и последнее. При правильной сортировке выдаст то что надо.

Щас проверить не могу. Завтра.
...
Рейтинг: 1 / 0
Нравится: Горбатый ёж
24.04.2023, 22:00
    #370041
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
Но если кому то делать нехуй то можете тоже задрочить скульсервер!
...
Рейтинг: 0 / 1
Не нравится: Огрищще
24.04.2023, 22:02
    #370044
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose [игнорируется] 

подождём ...
Игорёк - подождём
...
дед-пердед
Изменено: 24.04.2023, 22:02 - Гарыныч
Рейтинг: 0 / 0
24.04.2023, 22:03
    #370045
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 22:00
[игнорируется]
Но если кому то делать нехуй то можете тоже задрочить скульсервер!
тут таких нет!
...
дед-пердед
Изменено: 24.04.2023, 22:03 - Гарыныч
Рейтинг: 0 / 0
24.04.2023, 22:11
    #370051
cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гесты и игнорируемые идут по CSS
А можно как-то запросом получить ? MS SQL
Без подзапросов можно так
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select t0.name, t1.id as id1, t0.mintime, t2.id as id2, t0.maxtime from
(
------- это можно завернуть во вьюху, начало
select [name],
min([time]) as mintime,
max([time]) as maxtime
from t
group by [name]
------- это можно завернуть во вьюху, конец
)  t0
join t as t1 on t0.[name] =  t1.[name] and t1.[time] = mintime
join t as t2 on t0.[name] =  t2.[name] and t2.[time] = maxtime
...
Рейтинг: 0 / 0
24.04.2023, 22:16
    #370056
cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гесты и игнорируемые идут по CSS
А можно как-то запросом получить ? MS SQL
Гарыныч  24.04.2023, 22:03
[игнорируется]
eNose  24.04.2023, 22:00
[игнорируется]
Но если кому то делать нехуй то можете тоже задрочить скульсервер!
тут таких нет!
Я есть!
...
Рейтинг: 1 / 0
Нравится: eNose
24.04.2023, 22:21
    #370062
Горбатый ёж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 21:57
[игнорируется]
Он немного перепутал
А что с лид лагом не так?
...
Рейтинг: 0 / 0
24.04.2023, 22:22
    #370064
Горбатый ёж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 21:59
[игнорируется]
lag lead это предыдущее и следующее в окне.
Точно.
...
Рейтинг: 0 / 0
25.04.2023, 01:24
    #370175
PaNik
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
eNose  24.04.2023, 19:15
[игнорируется]
Из такой таблицы
id name time
1 aaa 08:00
2 bbb 09:00
3 aaa 08:52
4 aaa 10:00
5 bbb 11:00
6 bbb 10:00
Такой результат
name id1 mintime id2 maxtime
aaa 1 08:00 4 10:00
bbb 2 09:00 5 11:00
То есть получить не только минимальное и максимальное время для каждого name, но и id записи.

Есть тут еще не пропившие мозг базоёбы?
если в таблице name'ов не очень много, то, наверное, можно так
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
use tempdb;
go

drop table if exists #a;
create table #a(
   id int not null primary key
  ,[name] varchar(10) not null
  ,[time] time not null
);

insert into #a(id, [name], [time])
values
   (  1,  'aaa',  '08:00')
  ,(  2,  'bbb',  '09:00')
  ,(  3,  'aaa',  '08:52')
  ,(  4,  'aaa',  '10:00')
  ,(  5,  'bbb',  '11:00')
  ,(  6,  'bbb',  '10:00');

; with cte as (
select
    a.name
   ,min(a.id) as id1
   ,min(a.time) as time1
  from #a as a
  group by a.name
)

select
     c.name
    ,c.id1
    ,c.time1 as [minute]
    ,t2.id as id2
    ,t2.time as [maxtime]
  from cte as c
  outer apply (
    select top 1 a.id, a.time
      from #a as a
      where a.name = c.name
      order by a.time desc
  ) as t2
З.Ы. только проснулся, вина нет, жду, когда чай остынет
...
Рейтинг: 1 / 0
Нравится: Гарыныч
25.04.2023, 01:25
    #370176
PaNik
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
Дед-Папыхтет  24.04.2023, 20:07
[игнорируется]
select ...
from (
lag/lead(id/time) over (partition by name order by id) lagid
) T
where lagid is not null
меня чет не прет на оконные функции после вина
...
Рейтинг: 0 / 0
25.04.2023, 01:42
    #370183
PaNik
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
PaNik  25.04.2023, 01:24
[игнорируется]
eNose  24.04.2023, 19:15
[игнорируется]
Из такой таблицы
id name time
1 aaa 08:00
2 bbb 09:00
3 aaa 08:52
4 aaa 10:00
5 bbb 11:00
6 bbb 10:00
Такой результат
name id1 mintime id2 maxtime
aaa 1 08:00 4 10:00
bbb 2 09:00 5 11:00
То есть получить не только минимальное и максимальное время для каждого name, но и id записи.

Есть тут еще не пропившие мозг базоёбы?
если в таблице name'ов не очень много, то, наверное, можно так
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
use tempdb;
go

drop table if exists #a;
create table #a(
   id int not null primary key
  ,[name] varchar(10) not null
  ,[time] time not null
);

insert into #a(id, [name], [time])
values
   (  1,  'aaa',  '08:00')
  ,(  2,  'bbb',  '09:00')
  ,(  3,  'aaa',  '08:52')
  ,(  4,  'aaa',  '10:00')
  ,(  5,  'bbb',  '11:00')
  ,(  6,  'bbb',  '10:00');

; with cte as (
select
    a.name
   ,min(a.id) as id1
   ,min(a.time) as time1
  from #a as a
  group by a.name
)

select
     c.name
    ,c.id1
    ,c.time1 as [minute]
    ,t2.id as id2
    ,t2.time as [maxtime]
  from cte as c
  outer apply (
    select top 1 a.id, a.time
      from #a as a
      where a.name = c.name
      order by a.time desc
  ) as t2
З.Ы. только проснулся, вина нет, жду, когда чай остынет
ересь какую-то написал, так вроде интереснее
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
use tempdb;
go

drop table if exists #a;
create table #a(
   id int not null primary key
  ,[name] varchar(10) not null
  ,[time] time not null
);

insert into #a(id, [name], [time])
values
   (  1,  'aaa',  '08:00')
  ,(  2,  'bbb',  '09:00')
  ,(  3,  'aaa',  '08:52')
  ,(  4,  'aaa',  '10:00')
  ,(  5,  'bbb',  '11:00')
  ,(  6,  'bbb',  '10:00');

; with cte as (
select
    a.name
  from #a as a
  group by a.name
)

select
     c.name
    ,t1.id as id1
    ,t1.time as [minute]
    ,t2.id as id2
    ,t2.time as [maxtime]
  from cte as c
  outer apply (
    select top 1 a.id, a.time
      from #a as a
      where a.name = c.name
      order by a.time
  ) as t1
  outer apply (
    select top 1 a.id, a.time
      from #a as a
      where a.name = c.name
      order by a.time desc
  ) as t2
...
Изменено: 25.04.2023, 01:47 - PaNik
Рейтинг: 0 / 0
25.04.2023, 09:27
    #370310
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно как-то запросом получить ? MS SQL
ну самое простое:

1 - берем 1ю и последнюю строку
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select *
from
(
    select
        *
        ,row_number() over (partition by name order by id asc)  rasc
        ,row_number() over (partition by name order by id desc)  rdesc
    from #a
) t
where 1 in (rasc, rdesc)
2 - группировка:
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
    name,
    min(id) as id1,
    min(time) as time1,
    max(id) as id2,
    max(time) as time2
from
(
    select
        *
        ,row_number() over (partition by name order by id asc)  rasc
        ,row_number() over (partition by name order by id desc)  rdesc
    from #a
) t
where 1 in (rasc, rdesc)
group by
    name
ну или 2й вариант с lag/lead
...
Изменено: 25.04.2023, 09:28 - Дед-Папыхтет
Рейтинг: 0 / 0
Форумы / Просто Трёп [закрыт для гостей] / А можно как-то запросом получить ? MS SQL / 25 сообщений из 201, страница 2 из 9
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Игнорируют тему (1): erbol
Читали форум (97): Анонимы (90), IT-Клоп, Сталкер, Гарыныч, XEugene 1 мин., Брюквенные годы 3 мин., anonymous 6 мин., Кусь 6 мин.
Пользователи онлайн (120): Анонимы (108), IT-Клоп, Сталкер, Гарыныч, Yandex Bot 1 мин., XEugene 1 мин., Bing Bot 2 мин., Ветер 3 мин., Брюквенные годы 3 мин., Буся 6 мин., anonymous 6 мин., Кусь 6 мин., Green 7 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]