SQL Group By并指定最高值

时间:2017-10-22 09:42:43

标签: sql sql-server database ms-access

我正在努力使用SQL(mssql)来操作我需要它的数据。我有一张这样的桌子;

SOMEID, SOMEFIELD, DATE
5        True    01-01-2010
5        True    01-01-2011
5        False   05-05-2012
7        True    05-05-2011
7        False   06-07-2015 

我想要实现的是添加另一列,如果它们是该ID的最新值,则分配值1,否则为0。因此,在上面的数据示例中,从上到下的新列值将为0,0,1,0,1。

我知道我需要按日期分组,但是在分配值时遇到了问题。

感谢您的任何指示!

3 个答案:

答案 0 :(得分:1)

您可以使用自联接来获取每组的最高行,然后在更新查询中使用case语句为新列分配值

update a
set a.[somecol] = case when b.[SOMEID] is null then 1 else 0 end
from demo a
left join demo b on a.[SOMEID] = b.[SOMEID]
and a.[DATE] < b.[DATE]

DEMO

答案 1 :(得分:1)

您可以在SQL Server中使用row_number(),如下所示:

select *
   , case when (row_number() over (partition by SOMEID order by [Date] desc)) = 1 then 1 else 0 end seq
from 
    yourTable
order by 
    SOMEID, [Date];

SQL Fiddle Demo

答案 2 :(得分:0)

试试这个

SELECT SOMEID, SOMEFIELD, DATE 
, CASE WHEN (SELECT MAX(SubTab.Date) 
             FROM myTable SubTab 
             WHERE SubTab.SOMEID = myTable.SOMEID
            ) = myTable.DATE 
        THEN 1 ELSE 0 END
FROM myTable