Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂TSQL查询_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

复杂TSQL查询

复杂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 (

我有一张大桌子。下面是如何将数据结构化到此表中的模型。 我需要创建一个返回此数据集的查询。 让我解释一下结果是什么。在这里,我想为“Column1”中的每个不同值选择行,它的最新日期在“Column6”中

解决这个问题的最佳方法是什么。回想一下,表是巨大的,我认为最好避免连接

对于每列1,使用将前1列6降序

交叉版本:

具有不同子查询版本的交叉:

 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;