Sql 按最新LastModifiedDatetime排序的前30条不同记录
我执行了以下查询,包含SearchText、SearchURL、LastModifiedDateTime、Country列Sql 按最新LastModifiedDatetime排序的前30条不同记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我执行了以下查询,包含SearchText、SearchURL、LastModifiedDateTime、Country列 select Top 30 * from SearchHistory order by LastModifiedDateTime desc 这里面有很多重复的记录。我需要在最新的LastModifiedDatetime之前进行不同的(搜索URL)记录顺序 我尝试了以下查询: SELECT Top 30 * FROM (SELECT *, Row_number
select Top 30 * from SearchHistory order by LastModifiedDateTime desc
这里面有很多重复的记录。我需要在最新的LastModifiedDatetime之前进行不同的(搜索URL)记录顺序
我尝试了以下查询:
SELECT Top 30 * FROM (SELECT *, Row_number()
OVER(
PARTITION BY SearchURL
ORDER BY LastModifieddateTime desc) AS RN
FROM SearchHistory where searchtext is not null )A
WHERE RN = 1
但我得到的结果完全不同(非常旧的记录位于顶部)
我需要按LastModifiedDatetime desc排序的前30条不同(searchurl)记录回答:
我唯一遗漏的是在RN之后添加orderby子句。我的印象是,在搜索URL之后由LastModifieddateTime desc订购将解决此问题
SELECT Top 30 * FROM (SELECT *, Row_number()
OVER(
PARTITION BY SearchURL
ORDER BY LastModifieddateTime desc) AS RN
FROM SearchHistory where searchtext is not null )A
WHERE RN = 1 ORDER BY LastModifieddateTime desc
下面是一个使用分组的更简单的替代方案:
SELECT TOP 30 SearchURL, MAX(LastModifiedDateTime) AS LastModifiedDateTime
FROM SearchHistory
GROUP BY SearchURL
ORDER BY LastModifiedDateTime DESC
然后使用
ORDER BY LastModifieddateTime DESC
代替您的查询,因为它看起来很好,不知道您期望的是什么我期望LastModifieddateTime DESC的前30个不同的(搜索URL)记录顺序,但我的查询返回顶部的一些旧记录,您混淆了行数()OVER()中的ORDER BY
,它只说明如何排序行号,在查询结束时使用orderby
,在完成筛选后排序整个SELECT
。如果您解决了问题,则应将您的解决方案作为答案发布给未来的读者