Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Непредсказуемое поведение MAX OVER / 5 сообщений из 5, страница 1 из 1
29.06.2018, 12:28
    #39667580
serega063
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непредсказуемое поведение MAX OVER
запрос!
Хочу чтоб группировка 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
29.06.2018, 12:59
    #39667597
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непредсказуемое поведение MAX OVER
serega063,

а order by bdt desc вы с какой целью написали?
эти вы "превратили" свой over в
OVER(partition by dt order by bdt desc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
...
Рейтинг: 0 / 0
29.06.2018, 13:14
    #39667601
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непредсказуемое поведение MAX OVER
Код: 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
02.07.2018, 10:21
    #39668197
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непредсказуемое поведение MAX OVER
msLexserega063,

а order by bdt desc вы с какой целью написали?
эти вы "превратили" свой over в
OVER(partition by dt order by bdt desc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
фантастика
...
Рейтинг: 0 / 0
02.07.2018, 10:43
    #39668204
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непредсказуемое поведение MAX OVER
на всякий случай
автор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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Непредсказуемое поведение MAX OVER / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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