Sql server 如何获得每10分钟sql查询数据的最高记录
我的桌子如下:Sql server 如何获得每10分钟sql查询数据的最高记录,sql-server,Sql Server,我的桌子如下: WITH Cte AS( SELECT *, rn = ROW_NUMBER() OVER( PARTITION BY cdt, DATEADD(MINUTE, DATEDIFF(MINUTE, 0, cdt), 0) ORDER BY cdt DESC ) FROM brands ) SELECT brandID, brandname, cdt,
WITH Cte AS(
SELECT *,
rn = ROW_NUMBER() OVER(
PARTITION BY cdt, DATEADD(MINUTE, DATEDIFF(MINUTE, 0, cdt), 0)
ORDER BY cdt DESC
)
FROM brands
)
SELECT
brandID, brandname, cdt, udt, brandstatus, addedby
FROM Cte
WHERE rn = 1 and cdt between '2013-11-01 00:00:00' and '2013-11-16 00:00:00' ORDER BY brandId
我希望获得x小时/天范围内每n分钟的数据。如果n=10,则应返回x=5小时之间10分钟间隔的最高值
对于n=10
ID brandname cdt udt brandstatus addedby
1 khasim 2013-11-01 19:14:18.120 2013-11-15 19:14:18.123 1 1
2 khasim 2013-11-01 19:14:18.121 2013-11-15 19:14:18.123 1 1
3 khasim 2013-11-01 19:14:18.122 2013-11-15 19:14:18.123 1 1
4 khasim 2013-11-01 19:14:18.123 2013-11-15 19:14:18.123 1 1
5 khasim 2013-11-02 19:17:57.700 2013-11-15 19:17:57.700 1 2
6 tanveer 2013-11-03 19:18:05.947 2013-11-15 19:18:05.947 1 2
7 abcdef 2013-11-04 20:50:06.783 2013-11-15 20:50:06.787 1 4
您可以尝试按datediff值分组,如 (已编辑):
rn = ROW_NUMBER() OVER(
PARTITION BY DATEDIFF(MINUTE, 0, cdt) / 10
ORDER BY cdt DESC)
输出:
WITH cte as (
SELECT ID, brandname, cdt, udt, brandstatus, addedby,
DATEDIFF(MINUTE,'2000-01-01', cdt)/10 step
FROM #tbl
)
SELECT ID, brandname, cdt, udt, brandstatus, addedby FROM cte a
WHERE ID=(SELECT TOP 1 ID FROM cte b
WHERE b.brandname=a.brandname
AND b.step=a.step
ORDER BY b.cdt DESC)
WITH cte as (
SELECT ID, brandname, cdt, udt, brandstatus, addedby,
DATEDIFF(MINUTE,'2000-01-01', cdt)/10 step
FROM #tbl
)
SELECT ID, brandname, cdt, udt, brandstatus, addedby FROM cte a
WHERE ID=(SELECT TOP 1 ID FROM cte b
WHERE b.step=a.step
ORDER BY b.cdt DESC)
(2.编辑):
ID brandname cdt udt brandstatus addedby
-- --------- ------------------- ------------------- ----------- -------
3 khasim 2013-11-01 19:14:18 2013-11-15 19:14:18 1 1
5 khasim 2013-11-02 19:17:57 2013-11-15 19:17:57 1 2
6 tanveer 2013-11-03 19:18:05 2013-11-15 19:18:05 1 2
7 abcdef 2013-11-04 20:50:06 2013-11-15 20:50:06 1 4
输出:
WITH cte as (
SELECT ID, brandname, cdt, udt, brandstatus, addedby,
DATEDIFF(MINUTE,'2000-01-01', cdt)/10 step
FROM #tbl
)
SELECT ID, brandname, cdt, udt, brandstatus, addedby FROM cte a
WHERE ID=(SELECT TOP 1 ID FROM cte b
WHERE b.brandname=a.brandname
AND b.step=a.step
ORDER BY b.cdt DESC)
WITH cte as (
SELECT ID, brandname, cdt, udt, brandstatus, addedby,
DATEDIFF(MINUTE,'2000-01-01', cdt)/10 step
FROM #tbl
)
SELECT ID, brandname, cdt, udt, brandstatus, addedby FROM cte a
WHERE ID=(SELECT TOP 1 ID FROM cte b
WHERE b.step=a.step
ORDER BY b.cdt DESC)
(3.编辑)16天内最大的cdt
:
ID brandname cdt udt brandstatus addedby
-- --------- ------------------- ------------------- ----------- -------
3 khasim 2013-11-01 19:14:18 2013-11-15 19:14:18 1 1
5 khasim 2013-11-02 19:17:57 2013-11-15 19:17:57 1 2
6 tanveer 2013-11-03 19:18:05 2013-11-15 19:18:05 1 2
7 abcdef 2013-11-04 20:50:06 2013-11-15 20:50:06 1 4
最高的价值到底是什么<代码>cdt?所以一个在12:00,一个在12:03,一个在12:11,时间间隔设置为10分钟的条目总是返回12:03和12:11的条目?是的,cdtA问题的最高值,包括其自身的屏幕截图。。。现在我已经看到了一切:)如果我这样做的话,它会给每一分钟的间隔。你已经尝试过了,但它没有给出预期的结果吗?因为品牌名称分组已从问题中删除,我认为按DATEDIFF(分钟,0,cdt)/10划分的
就足够了。哦。。。它被移除了。我会进行相应的编辑,谢谢joachimi编辑了我的查询,你能看一下吗,我已经检查了你提供的输出。如果您可以看到结果cdt如果您看到id 5和6的时间19:17:。。和19:18.具有相同的小时间隔..如果在10分钟间隔内,则应只获得一条该间隔最高的记录..我将用预期结果更新我的答案..在我的第一个版本中,我假设您希望对每个品牌名称进行分组。我在第二个版本中删除了它。它不会更改给定样本数据的输出。由于ID为5和6的样本属于不同的日期,因此也属于不同的时间间隔。我添加了一张带有解释的图像,请检查一下。您问题的标题有点误导。。。但是如果你想要16天的间隔,请查看我上面的第三次编辑。