sql基于列选择行是否为空

sql基于列选择行是否为空,sql,sql-server,Sql,Sql Server,样本数据 ID SettingID DifferentSettingID Value 1 100 Null True 2 100 5 False 3 101 Null 0 4 101 5 1 5 102 NULL

样本数据

ID    SettingID   DifferentSettingID  Value
1     100         Null                True
2     100         5                   False
3     101         Null                0
4     101         5                   1
5     102         NULL                100
想要的结果

ID    SettingID   DifferentSettingID  Value
2     100         5                   False
4     101         5                   1
5     102         NULL                100

其中设置ID需要是唯一的

,具有
行号
窗口功能:

;with cte as(select *, row_number() 
                         over(partition by SettingID order by ID desc) rn from TableName)
select * from cte 
where rn = 1

此窗口函数将按
SettingID
值对分区中的行进行编号。例如,对于
SettingID=100
,它会将编号
1
赋予
ID 2
,将编号
2
赋予
ID 1
(因为
desc排序
)。与设置ID=101相同。。。因此,对于该分区中最大的
ID
,每个分区(设置ID的值)将获得
行数=1
。其余的只是通过
rn=1

进行筛选,不知道为什么有人对此投了反对票。这是最好的方法。我确实认为一些解释会很好。我希望使用不同的setingId=5的行,这些行可能不在order@theHaggis,那么,您首先尝试了什么?我假设您更喜欢DifferentSettingID不为NULL的行,如果不可用,请选择DifferentSettingID=NULL的行,而不是按ID描述排序?