我的桌子如下
Item|Year|Price
---------------
C|2010|50
C|2000|40
C|1999|30
A|2010|10
A|2009|15
B|2018|10
B|2017|100
B|2015|750
D|2018|220
D|2017|200
D|2016|185
我想编写一个查询,以便仅获取每隔一年按递增顺序价格的商品名称。 上述模式的输出为
ITEM
----
D
C
(D和C仅在更高的年份具有递增的价格) 我尝试使用自我加入,但无法获得所需的输出
答案 0 :(得分:1)
我认为此查询将为您提供所需的结果。它使用自联接来查找某项价格低于上一年的所有年份。价格晚些时候没有价格降低的商品(将显示为i2.Item = NULL)将具有COUNT(i2.Item)= 0:
SELECT i1.Item
FROM Items i1
LEFT JOIN Items i2 ON i2.Item = i1.Item AND i2.Price < i1.Price AND i2.Year > i1.Year
GROUP BY i1.Item
HAVING COUNT(i2.Item) = 0
输出:
Item
C
D
答案 1 :(得分:1)
您可以像下面的select语句中那样使用lag
分析函数:
select item
from
(
select sign(price - lag(price,1,0) over (order by year)) val,
t.item
from tab t
)
group by item
having avg(val)=1;
ITEM
----
D
C