现在我希望能够列出当天销售的第二低价产品

时间:2013-12-05 02:42:48

标签: sql sql-server database

我希望能够列出我在微软服务器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

3 个答案:

答案 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

请注意,如果您有值112,则会返回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解决方案。