Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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/1/ms-access/4.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
Sql 按id分组并选择“最近”_Sql_Ms Access_Group By - Fatal编程技术网

Sql 按id分组并选择“最近”

Sql 按id分组并选择“最近”,sql,ms-access,group-by,Sql,Ms Access,Group By,我有这样一个表格示例: date id status 01/01/2013 55555 high 01/01/2014 55555 low 01/01/2010 44444 high 01/01/2011 33333 low 我需要按顺序:按id分组并选择最近日期 这就是我想要的结果 date id status 01/01/2014 55555 low 01/01/2010 44444 high 01

我有这样一个表格示例:

 date        id     status
 01/01/2013  55555  high 
 01/01/2014  55555  low 
 01/01/2010  44444  high
 01/01/2011  33333  low
我需要按顺序:按id分组并选择最近日期

这就是我想要的结果

 date        id     status
 01/01/2014  55555  low 
 01/01/2010  44444  high
 01/01/2011  33333  low

我不关心行的顺序。

您需要使用子查询连接表,该子查询将记录日期与每个id的最大日期链接起来:

select a.*
from your_table as a
     inner join (
         select id, max(date) as max_date 
         from your_table 
         group by id
     ) as b on a.id = b.id and a.date = b.max_date;

您需要使用子查询连接表,该子查询将记录日期与每个id的最大日期链接起来:

select a.*
from your_table as a
     inner join (
         select id, max(date) as max_date 
         from your_table 
         group by id
     ) as b on a.id = b.id and a.date = b.max_date;

我认为您需要一个子查询来获取MAXDate,然后是内部联接。试试这个:

SELECT A.[Date], A.[Id], A.[Status]
FROM Table A
INNER JOIN(SELECT Id, MAX([Date]) AS MaxDate
FROM Table
GROUP BY [Id]) B ON
A.[Id] = B.[Id] AND
A.[Date] = B.[MaxDate]

我认为您需要一个子查询来获取MAXDate,然后是内部联接。试试这个:

SELECT A.[Date], A.[Id], A.[Status]
FROM Table A
INNER JOIN(SELECT Id, MAX([Date]) AS MaxDate
FROM Table
GROUP BY [Id]) B ON
A.[Id] = B.[Id] AND
A.[Date] = B.[MaxDate]

-返回组id和该组中的最新日期

select id
, MAX([date]) [latestDateInGroup]
from tbl 
group by id
select id
, [status] [latestDateInGroup'sStatus]
, [date] [latestDateInGroup]
from
(
    select id
    , [status]
    , [date]
    , row_number() over (partition by id order by [date] desc) r
    from tbl
) x
where x.r = 1
-返回组id,以及记录的相关状态和日期以及该组中的最新日期

select id
, MAX([date]) [latestDateInGroup]
from tbl 
group by id
select id
, [status] [latestDateInGroup'sStatus]
, [date] [latestDateInGroup]
from
(
    select id
    , [status]
    , [date]
    , row_number() over (partition by id order by [date] desc) r
    from tbl
) x
where x.r = 1
-返回所有ID和状态,以及该组的组中的最新日期需要SQL 2012+

select id
, [status]
, max([date]) over (partition by id order by [date] desc) [latestDateInGroup]
from tbl
SQL Fiddle目前处于脱机状态;备份后,下面的代码应该允许您构建一个表来测试上面的查询


-返回组id和该组中的最新日期

select id
, MAX([date]) [latestDateInGroup]
from tbl 
group by id
select id
, [status] [latestDateInGroup'sStatus]
, [date] [latestDateInGroup]
from
(
    select id
    , [status]
    , [date]
    , row_number() over (partition by id order by [date] desc) r
    from tbl
) x
where x.r = 1
-返回组id,以及记录的相关状态和日期以及该组中的最新日期

select id
, MAX([date]) [latestDateInGroup]
from tbl 
group by id
select id
, [status] [latestDateInGroup'sStatus]
, [date] [latestDateInGroup]
from
(
    select id
    , [status]
    , [date]
    , row_number() over (partition by id order by [date] desc) r
    from tbl
) x
where x.r = 1
-返回所有ID和状态,以及该组的组中的最新日期需要SQL 2012+

select id
, [status]
, max([date]) over (partition by id order by [date] desc) [latestDateInGroup]
from tbl
SQL Fiddle目前处于脱机状态;备份后,下面的代码应该允许您构建一个表来测试上面的查询


@Lourger:OP不想要任何状态,但是最后一个日期的状态选择日期,id,状态从t1,选择id,maxdate maxdate group by id作为g1,其中t1.id=g1.id和t1.date=g1.maxdateanswer不需要注释:OPs下的@juergend可能重复这是我想要的结果,其中一列是状态。@Lourger:OP不想要任何状态,但是最后一个日期中的一个选择日期,id,status from t1,Select id,maxdate maxdate group by id作为g1,其中t1.id=g1.id和t1.date=g1.maxdate回答不注释:OPs下的@juergend可能重复这是我想要的结果,其中一列是status。感谢所有人,尤其是BARRANKA。我应用了你的解决方案,效果很好。感谢所有人,尤其是BARRANKA。我应用了你的解决方案,效果很好。