SQL:比较相同table中的2行,满足条件时输出结果

SQL: Compare 2 rows in the same table and output result when conditions are met

我是 SQL 的新手,如果这是一个重复的问题,我深表歉意,尝试在论坛中搜索答案,但找不到任何答案。 我创建了一个临时 table 如下:

Drop TABLE if EXISTS #temp
Create table #temp(ID int, Country VARCHAR(40), ItemCount int, DeliveryDate Date, Itemtype VARCHAR(40) )
insert #temp(id,Country,itemCount,DeliveryDate,Itemtype)
Select 
             3012111,'Dublin',     100, '01-01-2022', 'Head Gears'
union select 2012111,'Dublin',     200, '01-05-2022', 'Head Gears'
union select 2012112,'Australia',  300, '01-03-2022', 'Knee Pad'
union select 2012110,'Australia',  100, '01-04-2022', 'Head Gears'
union select 2012113,'Singapore',  150, '01-05-2022', 'Head Gears'
union select 2012114,'Singapore',  200, '01-07-2022', 'FootWear'
union select 2012116,'Brazil',     500, '01-08-2022', 'Head Gears'
union select 2012115,'Brazil',     300, '01-06-2022', 'Head Gears'
union select 2012117,'Indonesia',  150, '01-10-2022', 'Foot Wear'

我正在尝试编写查询以仅在满足以下条件时从临时 table 输出结果:

  1. 按“国家/地区分组,比较商品数量和交货日期
  2. Return 只输出给定的最低 itemcount 的交货日期 按项目类型“Head Gears”分类的国家排在最大项目数之前。如果 对于给定的国家/地区,项目类型“头”只有一次交付 Gears”,不要 return 任何东西作为输出。

尝试过此代码但无法完成它以获得所需的输出:

Select X.Country, min(id) Id, X.ItemCount
from (
select Country, max(itemCount) itemCount
from #temp
group by Country
) X
inner join #temp T
on X.Country = T.Country
and X.itemCount = T.ItemCount
group by X.Country, X.itemCount

这是我需要的输出:https://i.stack.imgur.com/3mHWD.png

感谢您的帮助!

我假设您正在使用 SQL 服务器。 另外,如果我理解了你的问题,那么我认为你需要的输出图像是不正确的。我认为对于您提供的数据,您的结果需要是都柏林 100 而不是都柏林 200?

with t1 as (
select a.*
from #temp a
where a.country in (select b.country
                    from #temp b
                    group by b.country
                    having min(b.ItemCount) = a.ItemCount)), 
t2 as (select a.*
from #temp a
where a.country in (select b.country
                    from #temp b
                    group by b.country
                    having max(b.ItemCount) = a.ItemCount))
select t1.country, t1.id, t1.ItemCount, t1.DeliveryDate, t1.Itemtype
from t1
left join t2 on t1.country = t2.country
where t1.DeliveryDate < t2.DeliveryDate
and t1.Itemtype = 'Head Gears'
and t1.Itemtype = t2.Itemtype;

我相信这可以写得更好,但我希望这对您有所帮助...

这里是 fiddle 你可以看到代码的运行:clickhere