powered by simpleCommunicator - 2.0.17     © 2024 Programmizd 02
Map
Форумы / Просто Трёп [закрыт для гостей] / А можно как-то запросом получить ? MS SQL
25 сообщений из 201, страница 2 из 9
А можно как-то запросом получить ? MS SQL
    #369903
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
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
А можно как-то запросом получить ? MS SQL
    #369909
cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гесты и игнорируемые идут по CSS
Код: 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, Гарыныч, Ифрит
А можно как-то запросом получить ? MS SQL
    #369916
Огрищще
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Улыбайтесь - это всех раздражает.©
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
А можно как-то запросом получить ? MS SQL
    #369919
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
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
А можно как-то запросом получить ? MS SQL
    #369921
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
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
А можно как-то запросом получить ? MS SQL
    #369923
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Гарыныч  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
А можно как-то запросом получить ? MS SQL
    #370014
eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
Дед-Папыхтет  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
А можно как-то запросом получить ? MS SQL
    #370017
eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
Запрос Кота2 это понятно, но хочу без подзапросов
...
Рейтинг: 0 / 0
А можно как-то запросом получить ? MS SQL
    #370018
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
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
А можно как-то запросом получить ? MS SQL
    #370020
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
eNose  24.04.2023, 21:44
[игнорируется]
Запрос Кота2 это понятно, но хочу без подзапросов
ну тогда продолжай хотеть :))) по Папыху
...
дед-пердед
Рейтинг: 0 / 0
А можно как-то запросом получить ? MS SQL
    #370027
eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
Гарыныч  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
А можно как-то запросом получить ? MS SQL
    #370035
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
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
А можно как-то запросом получить ? MS SQL
    #370037
eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
Гарыныч  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
А можно как-то запросом получить ? MS SQL
    #370040
eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
lag lead это предыдущее и следующее в окне.

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

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

подождём ...
Игорёк - подождём
...
дед-пердед
Изменено: 24.04.2023, 22:02 - Гарыныч
Рейтинг: 0 / 0
А можно как-то запросом получить ? MS SQL
    #370045
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
eNose  24.04.2023, 22:00
[игнорируется]
Но если кому то делать нехуй то можете тоже задрочить скульсервер!
тут таких нет!
...
дед-пердед
Изменено: 24.04.2023, 22:03 - Гарыныч
Рейтинг: 0 / 0
А можно как-то запросом получить ? MS SQL
    #370051
cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гесты и игнорируемые идут по CSS
Без подзапросов можно так
Код: 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
А можно как-то запросом получить ? MS SQL
    #370056
cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гесты и игнорируемые идут по CSS
Гарыныч  24.04.2023, 22:03
[игнорируется]
eNose  24.04.2023, 22:00
[игнорируется]
Но если кому то делать нехуй то можете тоже задрочить скульсервер!
тут таких нет!
Я есть!
...
Рейтинг: 1 / 0
Нравится: eNose
А можно как-то запросом получить ? MS SQL
    #370062
Горбатый ёж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose  24.04.2023, 21:57
[игнорируется]
Он немного перепутал
А что с лид лагом не так?
...
Рейтинг: 0 / 0
А можно как-то запросом получить ? MS SQL
    #370064
Горбатый ёж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose  24.04.2023, 21:59
[игнорируется]
lag lead это предыдущее и следующее в окне.
Точно.
...
Рейтинг: 0 / 0
А можно как-то запросом получить ? MS SQL
    #370175
PaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
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
Нравится: Гарыныч
А можно как-то запросом получить ? MS SQL
    #370176
PaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Дед-Папыхтет  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
А можно как-то запросом получить ? MS SQL
    #370183
PaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
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
А можно как-то запросом получить ? MS SQL
    #370310
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну самое простое:

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
25 сообщений из 201, страница 2 из 9
Форумы / Просто Трёп [закрыт для гостей] / А можно как-то запросом получить ? MS SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (2): Анонимы (2)
Игнорируют тему (1): erbol 
Читали форум (12): Анонимы (6), Брюквенные годы, zzdima 1 мин., prostozevs 2 мин., Неуловимый Джо 2 мин., Шоколадный01 3 мин., Горбатый ёж 8 мин.
Пользователи онлайн (42): Анонимы (26), Брюквенные годы, Кусь, Сталкер, Yandex Bot, prostozevs, zzdima, Google Bot 2 мин., Ветер 2 мин., Неуловимый Джо 2 мин., erbol 2 мин., Шоколадный01 3 мин., Green 5 мин., s62 5 мин., Bing Bot 6 мин., sergey11 8 мин., Горбатый ёж 8 мин.
x
x
Закрыть


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