我希望能够列出我在微软服务器sql studio 2008上查询后当天销售的第二低价产品。(我知道如何列出那些回答这个问题的人的最低价格这里,但是什么如果我只想列出第二低,第三或第四最低,但我们只关注如何列出第二低
这个表的名称是SALES
DATE PRODUCT_SOLD PRICE
2013-11-15, crab pot , 21.15
2013-11-15, bait , 3.50
2013-11-15, hooks , 11.99
2013-11-15 , sinkers , 1.99
2013-11-15 , fishing rod , 49.99
2013-11-16 , baitcaster , 29.99
2013-11-16 , squid bait , 3.50
2013-11-16 , knife , 9.95
2013-11-17 , fishing rod , 99.95
2013-11-17 , net , 25.99
如何显示它,以便列出一天中价格第二低的产品。
如下所示。
2013-11-15, bait , 3.50
2013-11-16 , knife , 9.95
2013-11-17 , fishing rod , 99.95
答案 0 :(得分:1)
您不清楚如何处理关系。以下是使用dense_rank()
的解决方案:
select date, product, price
from (select s.*, dense_rank() over (partition by date order by price ) as seqnum
from sales
) s
where seqnum = 2;
答案 1 :(得分:0)
这样的事情应该有效
select blah, blah, min(price) second_lowest_price
from wherever
where price > (subquery to get lowest price)
group by blah, blah
答案 2 :(得分:0)
尝试一下:
SELECT date, product_sold, price
FROM (
SELECT date, product_sold, price,
DENSE_RANK() OVER (PARTITION BY date ORDER BY price) rank
FROM sales
) t
WHERE rank = 2
小提琴here。
请注意,如果您有值1
,1
和2
,则会返回2
。如果您想要返回第二个 1
,请使用ROW_NUMBER
代替DENSE_RANK
。
如果您正在寻找大多数DBMS中的通用解决方案,那么您可以选择:
SELECT s2.date, min(s2.price) price FROM (
SELECT date, min(price) price FROM sales
GROUP BY date
) s1 JOIN sales s2 ON s1.date = s2.date AND s2.price > s1.price
GROUP BY s2.date
请注意,这个可以用作DENSE_RANK
解决方案。