返回开始/结束日期之间差异最大的行

时间:2014-03-11 20:36:28

标签: sql sql-server tsql

我有类似的东西:

1786    GIG 1   83936   0   3   2014-03-03 10:00:00.0000000 2014-03-03 12:59:59.0000000
1787    GIG 1   83936   0   3   2014-03-03 13:00:00.0000000 2014-03-04 15:59:59.0000000

我想返回开始/结束日期之间差异最大的行。

我试过了,但它不喜欢max

中的group by
select  id,
        keyword,
        shortcode
from keywordschedules 
where keyword = 'gig' 
group by max (datediff(minute,datefrom,dateto)),
            id,
            keyword,
            shortcode

应该返回1787行

1 个答案:

答案 0 :(得分:0)

我个人喜欢使用ROW_NUMBER()来协助解决此问题:

WITH RankedResults AS 
(
    SELECT id, keyword, shortcode,
           ROW_NUMBER() OVER (PARTITION BY keyword 
                              ORDER BY DATEDIFF(n, datefrom, dateto) DESC) rank
      FROM keywordschedules
)
SELECT id, keyword, shortcode 
  FROM RankedResults
 WHERE rank = 1 AND keyword = 'gig'

顶部的common-table-expression(CTE)为按时间差按降序排序的每组关键字分配排名(因此最大间隙分配为1)。然后在最终查询中,您要求排名为1的关键字。