【发布时间】:2018-04-26 06:32:54
【问题描述】:
需要帮助:)
所以我有一个包含以下列的记录表:
Key (PK, FK, int) DT (smalldatetime) Value (real)
DT 是一天中每半小时的日期时间,并带有相关值
例如
Key DT VALUE
1000 2010-01-01 08:00:00 80
1000 2010-01-01 08:30:00 75
1000 2010-01-01 09:00:00 100
我有一个查询,它每 24 小时及其相关时间查找最大值,但是,在某一天,最大值出现两次,因此重复了导致处理问题的日期。我尝试使用行号(),但我不能在 where 子句中使用计算列? 目前我有:
SELECT cast(T1.DT as date) as 'Date',Cast(T1.DT as time(0)) as 'HH', ROW_NUMBER() over (PARTITION BY cast(DT as date) ORDER BY DT) AS 'RowNumber'
FROM TABLE_1 AS T1
INNER JOIN (
SELECT CAST([DT] as date) as 'DATE'
, MAX([VALUE]) as 'MAX_HH'
FROM TABLE_1
WHERE DT > '6-nov-2016' and [KEY] = '1000'
GROUP BY CAST([DT] as date)
) AS MAX_DT
ON MAX_DT.[DATE] = CAST(T1.[DT] as date)
AND T1.VALUE = MAX_DT.MAX_HH
WHERE DT > '6-nov-2016' and [KEY] = '1000'
ORDER BY DT
这会导致
Key DT VALUE HH
1000 2010-01-01 80 07:00:00
1000 2010-02-01 100 17:30:00
1000 2010-02-01 100 18:00:00
我需要删除重复的日期(我没有偏好它需要哪个 HH)
我想我已经解释得很糟糕了,如果没有意义,请告诉我,我会尝试重新编写
有什么想法吗?
【问题讨论】:
-
用 row_number() 我想要么是 oracle 要么是 sqlserver
-
SQL SERVER - 我的道歉
标签: sql tsql datetime duplicates window-functions