我正在努力使用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。
我知道我需要按日期分组,但是在分配值时遇到了问题。
感谢您的任何指示!
答案 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]
答案 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];
答案 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