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天的间隔,请查看我上面的第三次编辑。