我的数据如下
ID Name Description DataSource Year
1 Apple Sweet & Tasty Source_A 2016
1 Apple Red and Sweet & Tasty Source_B 2015
2 Apple Delicious Source_A 2016
2 Apple Delicious and Red Source_C 2015
3 Apple Source_C 2013
3 Apple Green and Large Source_B 2016
在我的情况下,我想优先考虑source_B,因为它更可靠。因此,如果有来自Soure_B的数据,我想为特定ID显示该行并忽略其他ID。如果source_B中的数据不存在,那么我只想显示来自其他来源的数据。另外,我想只显示一行最新数据。
在上面的示例中,结果应该类似于
ID Name Description DataSource Year
1 Apple Red and Sweet & Tasty Source_B 2015
2 Apple Delicious Source_A 2016
3 Apple Green and Large Source_B 2016
答案 0 :(得分:2)
您可以使用row_number + case来执行优先级,如下所示:
select
id,
name,
description,
datasource,
year
from (
select
id,
name,
description,
datasource,
year,
row_number () over (
partition by ID
order by case when DataSource = 'Source_B' then 1 else 2 end,
Year desc
) as RN
from
table1
) X
where
RN = 1
分区依据将为每个ID选择新的ID,并按顺序选择行将获得的数量。然后,外部选择过滤掉除编号为1的行以外的其他行。
您可以在SQL Fiddle
中尝试此操作答案 1 :(得分:1)
使用自定义row_number()
的{{1}}:
order by