Sql 按最新LastModifiedDatetime排序的前30条不同记录

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

我执行了以下查询,包含SearchText、SearchURL、LastModifiedDateTime、Country列

 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
。如果您解决了问题,则应将您的解决方案作为答案发布给未来的读者