我有类似的东西:
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行
答案 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的关键字。