Sql server 按列排序

Sql server 按列排序,sql-server,group-by,Sql Server,Group By,我有一张像下面这样的桌子 201610 4435230309000131 5969 201601 4435230309000149 5969 201702 4435230309000149 5977 201702 4435230309000156 5962 201612 4435230309000156 7399 201702 4435230309000164 4812 201702 4435230309000172 7230 201702

我有一张像下面这样的桌子

201610  4435230309000131    5969
201601  4435230309000149    5969
201702  4435230309000149    5977
201702  4435230309000156    5962
201612  4435230309000156    7399
201702  4435230309000164    4812
201702  4435230309000172    7230
201702  4435230309000180    5968
201701  4435230309000180    5977
我想编写一个查询,返回与最近日期(第一列)对应的第二列和第三列。更具体地说,我不希望在结果表中看到以下记录

201702  4435230309000156    5962
201612  4435230309000156    7399
不过,我想要的是找回

201702  4435230309000156    5962
与最近日期(201702)关联

第一列为“int”格式

谢谢你的帮助


谢谢,

如果您只需要最新的一行,那么您可以像这样使用
top 1

select top 1 *
from t
order by date desc
如果您试图为
col2
中的每一个获取最新的行,您可以在子查询中使用
row\u number()
来获得公共表表达式,如下所示:

select 
    [date]
  , col2
  , col3
from (
  select *
    , rn = row_number() over (
        partition by col2
        order by [date] desc
        )
  from t
  ) as s
where rn = 1

如果只需要最新的一行,则可以使用
top 1
如下所示:

select top 1 *
from t
order by date desc
如果您试图为
col2
中的每一个获取最新的行,您可以在子查询中使用
row\u number()
来获得公共表表达式,如下所示:

select 
    [date]
  , col2
  , col3
from (
  select *
    , rn = row_number() over (
        partition by col2
        order by [date] desc
        )
  from t
  ) as s
where rn = 1

是否要按以下逻辑检索数据

DECLARE @tb TABLE(col1 INT,col2 VARCHAR(20),col3 INT )
INSERT INTO @tb
SELECT 201610,'4435230309000131',5969 UNION ALL
SELECT 201601,'4435230309000149',5969 UNION ALL
SELECT 201702,'4435230309000149',5977 UNION ALL
SELECT 201702,'4435230309000156',5962 UNION ALL
SELECT 201612,'4435230309000156',7399 UNION ALL
SELECT 201702,'4435230309000164',4812 UNION ALL
SELECT 201702,'4435230309000172',7230 UNION ALL
SELECT 201702,'4435230309000180',5968 UNION ALL
SELECT 201701,'4435230309000180',5977
SELECT * FROM (
SELECT MAX(col1)OVER() AS RecentDay, *,ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col2) AS rn1, ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col3) AS rn2 FROM @tb
) AS t WHERE t.RecentDay=t.col1 AND t.rn1=t.rn2
最近一列第1列第2列第3列第1列第2列 ----------- ----------- -------------------- ----------- -------------------- -------------------- 201702 201702 4435230309000156 5962 2 2
是否要按以下逻辑检索数据

DECLARE @tb TABLE(col1 INT,col2 VARCHAR(20),col3 INT )
INSERT INTO @tb
SELECT 201610,'4435230309000131',5969 UNION ALL
SELECT 201601,'4435230309000149',5969 UNION ALL
SELECT 201702,'4435230309000149',5977 UNION ALL
SELECT 201702,'4435230309000156',5962 UNION ALL
SELECT 201612,'4435230309000156',7399 UNION ALL
SELECT 201702,'4435230309000164',4812 UNION ALL
SELECT 201702,'4435230309000172',7230 UNION ALL
SELECT 201702,'4435230309000180',5968 UNION ALL
SELECT 201701,'4435230309000180',5977
SELECT * FROM (
SELECT MAX(col1)OVER() AS RecentDay, *,ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col2) AS rn1, ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col3) AS rn2 FROM @tb
) AS t WHERE t.RecentDay=t.col1 AND t.rn1=t.rn2
最近一列第1列第2列第3列第1列第2列 ----------- ----------- -------------------- ----------- -------------------- -------------------- 201702 201702 4435230309000156 5962 2 2