复杂TSQL查询
我有一张大桌子。下面是如何将数据结构化到此表中的模型。 我需要创建一个返回此数据集的查询。 让我解释一下结果是什么。在这里,我想为“Column1”中的每个不同值选择行,它的最新日期在“Column6”中 解决这个问题的最佳方法是什么。回想一下,表是巨大的,我认为最好避免连接 对于每列1,使用将前1列6降序 交叉版本: 具有不同子查询版本的交叉:复杂TSQL查询,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我有一张大桌子。下面是如何将数据结构化到此表中的模型。 我需要创建一个返回此数据集的查询。 让我解释一下结果是什么。在这里,我想为“Column1”中的每个不同值选择行,它的最新日期在“Column6”中 解决这个问题的最佳方法是什么。回想一下,表是巨大的,我认为最好避免连接 对于每列1,使用将前1列6降序 交叉版本: 具有不同子查询版本的交叉: select x.* from (select distinct Column1 from t) cross apply (
select
x.*
from (select distinct Column1 from t)
cross apply (
select top 1
*
from t as i
where i.Column1 = t.Column1
order by i.[date] desc
) as x;
版本:
select distinct
x.*
from t
cross apply (
select top 1
*
from t as i
where i.Column1 = t.Column1
order by i.[date] desc
) as x;
select top 1 with ties
*
from t
order by row_number() over (
partition by Column1
order by Column6 desc
)
我建议使用如下代码片段:
; WITH CTE AS (
SELECT Column1, Column2, Column3, Column4, Column5, Column6
, ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column6 DESC) RwNr
FROM TableName
)
SELECT Column1, Column2, Column3, Column4, Column5, Column
FROM CTE
WHERE RwNr = 1;
请记住,这使用了高性能的窗口功能
关于该主题的一些文件:
行号条款文件:
使用排名函数文档时必须使用的OVER子句:
停止张贴图片,改为发短信。你做了哪些尝试,发现了哪些问题,这意味着你需要征求建议?你能进一步解释一下发生了什么吗。我还认为,这里您要从每个分区中选择第一行,它必须具有最新的日期。我想选择每个分区中最新日期的行。好的,很抱歉您是按第6列描述排序的。谢谢您的回答。我将试一试。@user2307236按第6列排序desc表示它将第6列从最高到最低排序,即从最新到最旧
; WITH CTE AS (
SELECT Column1, Column2, Column3, Column4, Column5, Column6
, ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column6 DESC) RwNr
FROM TableName
)
SELECT Column1, Column2, Column3, Column4, Column5, Column
FROM CTE
WHERE RwNr = 1;