【发布时间】:2015-11-21 17:46:14
【问题描述】:
我有一个包含一些值的项目表,其中包括成本和购买日期。我正在尝试获取最昂贵商品的列表,每种商品类型一个,按特定商品的购买日期排序,结果中没有购买日期。
我的桌子(简体):
CREATE TABLE Purchases
(ItemType varchar(25),
Cost int,
PurchaseDate smalldatetime)
我的样本数据:
INSERT INTO Purchases VALUES
('Hat', 0, '2007-05-20 15:22'),
('Hat', 0, '2007-07-01 15:00'),
('Shirt', 3500, '2007-07-30 08:43'),
('Pants', 2000, '2008-07-30 12:00'),
('Pants', 4000, '2009-03-15 07:30'),
('Sweater', 3000, '2011-05-20 15:22'),
('Sweater', 3750, '2012-07-01 22:00'),
('Sweater', 2700, '2014-06-12 11:00'),
('Hat', 4700, '2015-06-29 07:10')
我的预期输出(为清楚起见添加了日期):
ItemType MostExpensivePerType
------------------------- --------------------
Shirt 3500 (2007-07-30 08:43)
Pants 4000 (2009-03-15 07:30)
Sweater 3750 (2012-07-01 22:00)
Hat 4700 (2015-06-29 07:10)
到目前为止我的工作:
我来回尝试过,我最好的结果是这个查询:
SELECT
ItemType, MAX(Cost) AS MostExpensivePerType
FROM
Purchases
GROUP BY
ItemType
ORDER BY
MostExpensivePerType DESC
每个项目类型产生最昂贵的项目,但按成本排序。如果没有ORDER BY 子句,它们似乎是按字母顺序排列的。我意识到我的查询中也需要日期列,但我可以输入它并在结果中“隐藏”它吗?或者我是否需要将到目前为止的结果保存在临时表中并加入我的常规表?解决此问题的最佳方法是什么?
【问题讨论】:
-
我喜欢您将输入数据和所需输出添加到问题中的方式。但我无法完全理解您的问题。你想在最终输出中得到什么?
-
我想要一个每个类别中最昂贵物品的列表:最昂贵的帽子、衬衫等(每一个),但我希望列表按我购买它们的日期排序。所以即使最贵的帽子比最贵的衬衫还要贵,如果衬衫是在帽子之前买的,衬衫应该排在第一位。见马克班尼斯特的回答:)
-
实际上,我刚刚意识到我误解了这个问题 - 我以为您希望它按最近购买的类别中的 any 项目排序,但我现在意识到您希望它在类别中最昂贵的商品的购买日期之前订购。我建议不接受我的回答,而是接受戈登的回答。
-
好的,我不接受你的回答。戈登的回答对我不起作用,但我相信我们会弄清楚的:)
标签: sql tsql ssms sql-server-2014