powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Непредсказуемое поведение MAX OVER
5 сообщений из 5, страница 1 из 1
Непредсказуемое поведение MAX OVER
    #39667580
serega063
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запрос!
Хочу чтоб группировка MAX использовалась по максимальной дате!
в результате появляется дубль

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *, max(cmd_id) OVER(partition by dt  order by bdt desc) max_id from(

select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23045 as cmd_id, cast('26.06.2018 10:20:00' AS DATETIME) as bdt, cast('26.06.2018 11:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23046 as cmd_id, cast('27.06.2018 12:00:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23059 as cmd_id, cast('27.06.2018 12:48:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n, 23045 as cmd_id, cast('26.06.2018 10:20:00' AS DATETIME) as bdt, cast('26.06.2018 11:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23046 as cmd_id, cast('27.06.2018 12:00:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23059 as cmd_id, cast('27.06.2018 12:48:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23056 as cmd_id, cast('27.06.2018 13:13:00' AS DATETIME) as bdt, cast('27.06.2018 13:30:00'AS DATETIME) as edt
)s1

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
dt	n	cmd_id	bdt	edt	max_id
2018-06-27 13:13:00.000	1	23059	2018-06-27 12:48:00.000	2018-06-27 13:00:00.000	23059
2018-06-27 13:13:00.000	1	23046	2018-06-27 12:00:00.000	2018-06-27 13:00:00.000	23059
2018-06-27 13:13:00.000	1	23045	2018-06-26 10:20:00.000	2018-06-26 11:00:00.000	23059
2018-06-27 13:14:00.000	2	23056	2018-06-27 13:13:00.000	2018-06-27 13:30:00.000	23056 *****ОТКУДА
2018-06-27 13:14:00.000	2	23059	2018-06-27 12:48:00.000	2018-06-27 13:00:00.000	23059
2018-06-27 13:14:00.000	2	23046	2018-06-27 12:00:00.000	2018-06-27 13:00:00.000	23059
2018-06-27 13:14:00.000	2	23045	2018-06-26 10:20:00.000	2018-06-26 11:00:00.000	23059



Что я делаю не так? заранее благодарен
...
Рейтинг: 0 / 0
Непредсказуемое поведение MAX OVER
    #39667597
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serega063,

а order by bdt desc вы с какой целью написали?
эти вы "превратили" свой over в
OVER(partition by dt order by bdt desc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
...
Рейтинг: 0 / 0
Непредсказуемое поведение MAX OVER
    #39667601
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Select *, max(case When dt = max_dt Then cmd_id End) over () as Max_ID From (
select *, max(dt) OVER() max_dt from(

select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23045 as cmd_id, cast('26.06.2018 10:20:00' AS DATETIME) as bdt, cast('26.06.2018 11:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23046 as cmd_id, cast('27.06.2018 12:00:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23059 as cmd_id, cast('27.06.2018 12:48:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n, 23045 as cmd_id, cast('26.06.2018 10:20:00' AS DATETIME) as bdt, cast('26.06.2018 11:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23046 as cmd_id, cast('27.06.2018 12:00:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23059 as cmd_id, cast('27.06.2018 12:48:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23056 as cmd_id, cast('27.06.2018 13:13:00' AS DATETIME) as bdt, cast('27.06.2018 13:30:00'AS DATETIME) as edt
)s1 ) s2
...
Рейтинг: 0 / 0
Непредсказуемое поведение MAX OVER
    #39668197
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLexserega063,

а order by bdt desc вы с какой целью написали?
эти вы "превратили" свой over в
OVER(partition by dt order by bdt desc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
фантастика
...
Рейтинг: 0 / 0
Непредсказуемое поведение MAX OVER
    #39668204
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на всякий случай
авторIf ORDER BY is not specified entire partition is used for a window frame. This applies only to functions that do not require ORDER BY clause. If ROWS/RANGE is not specified but ORDER BY is specified, RANGE UNBOUNDED PRECEDING AND CURRENT ROW is used as default for window frame. This applies only to functions that have can accept optional ROWS/RANGE specification. For example, ranking functions cannot accept ROWS/RANGE, therefore this window frame is not applied even though ORDER BY is present and ROWS/RANGE is not.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Непредсказуемое поведение MAX OVER
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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