我有一个查询,生成如下表:
我要完成的工作是,如果上诉ID值是该产品和年份的最大值,则返回“ TRUE”。因此结果将如下所示:
部件ID无关紧要,但在上诉ID中会产生重复的值。
我已经使用以下内容至少找到了正确的值:
SELECT MAX(AppealID)
,ProductID
,PartID
,Year
FROM (XYZ Tables with Many Joins)
GROUP BY ProductId,Year,PartID
但是,这显然只会返回这些值,而我无法添加我需要的所有其他列。我尝试了许多不同的CASE语句,但似乎无法正常工作。通常,我会遇到聚合错误。
有什么想法吗?
答案 0 :(得分:2)
您可以使用window functions进行此操作:
SELECT
,ProductID
,PartID
,Year
,CASE WHEN MAX(AppealID) OVER (PARTITION BY productid, year) = AppealID THEN 'TRUE' ELSE 'FALSE' END as MaxCheck
FROM (XYZ Tables with Many Joins)
这表示要在与该记录相同的productid
和year
匹配的记录组中获取max(appealid)。然后,我们将其与当前记录进行比较。
答案 1 :(得分:0)
您需要对子查询进行分组,然后加入以查找最大值:
declare @t table(product_id int, part_id int, appeal_id int, [year] int)
insert into @t values
(1,6,1,2016),
(1,7,1,2016),
(1,6,2,2017),
(1,7,2,2016),
(1,8,3,2016),
(1,8,1,2016);
select t.*, case when m.appeal_id is not null then 'TRUE' else '' end as Max_Check
from
@t t
left join
(
select MAX(appeal_id) appeal_id, product_id, [YEAR]
from
@t
group by product_id, [year]
) m on t.product_id = m.product_id and
t.year = m.year and
t.appeal_id = m.appeal_id