我需要写一个SQL-Server查询,但我不知道如何解决。我有一个包含数据的表RealtimeData:
Time | Value
4/29/2009 12:00:00 AM | 3672.0000
4/29/2009 12:01:00 AM | 3645.0000
4/29/2009 12:02:00 AM | 3677.0000
4/29/2009 12:03:00 AM | 3634.0000
4/29/2009 12:04:00 AM | 3676.0000 // is EOD of day "4/29/2009"
4/30/2009 12:00:00 AM | 3671.0000
4/30/2009 12:01:00 AM | 3643.0000
4/30/2009 12:02:00 AM | 3672.0000
4/30/2009 12:03:00 AM | 3634.0000
4/30/2009 12:04:00 AM | 3632.0000
4/30/2009 12:05:00 AM | 3672.0000 // is EOD of day "4/30/2009"
5/1/2009 12:00:00 AM | 3673.0000
5/1/2009 12:01:00 AM | 3642.0000
5/1/2009 12:02:00 AM | 3672.0000
5/1/2009 12:03:00 AM | 3634.0000
5/1/2009 12:04:00 AM | 3635.0000 // is EOD of day "5/1/2009"我想要获取表中存在的日期的EOD数据。(EOD =一天结束)。使用my sample的数据,我需要返回一个如下所示的表:
Time | Value
4/29/2009 | 3676.0000
4/30/2009 | 3672.0000
5/1/2009 | 3635.0000注意:我写这条评论是为了让你知道EOD在哪里。SQL Server的版本为2005。
注意: RealtimeData表中的数据量非常大,超过400.000行。请帮我写优化。
请帮我解决我的问题。谢谢。
发布于 2010-04-28 10:07:01
WITH RankedRealTimeData AS (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY CONVERT(VARCHAR(10), [TIME], 121)
ORDER BY Time DESC) AS RN
FROM RealTimeData
)
SELECT * FROM RankedRealTimeData WHERE RN=1;发布于 2010-04-28 10:13:13
SELECT
CAST(Time as DATE) EodDate,
(
SELECT TOP 1
Value
FROM RealtimeData I
WHERE CAST(I.Time AS Date) = CAST(O.Time AS Date)
ORDER BY Time DESC
) EodValue
FROM
RealtimeData O
GROUP BY CAST(Time as DATE)
ORDER BY CAST(Time as DATE)发布于 2010-04-30 12:23:12
;With wcte as ( Select vTime,vValue,Row_Number() over (partition by Convert(DateTime,Convert(varchar(10),vTime,110)) order by vTime Desc) rno from @vTable )Select vTime,vValue from wcte where rno =1
https://stackoverflow.com/questions/2726369
复制相似问题