【发布时间】:2015-11-15 04:05:33
【问题描述】:
这个问题是对this 早先问题(不是我问的)的扩展。
我有一个包含以下字段的表格:
id | date_from | date_to | price | priceName
--------------------------------------------------------
CK1 22-12-2012 29-12-2012 800 low
CK1 22-12-2012 29-12-2012 1200 medium
CK2 22-12-2012 29-12-2012 1400 high
CK2 22-12-2012 29-12-2012 1800 very high
CK2 22-12-2012 29-12-2012 2200 extortionate
如何创建一个 SQL 选择,按 ID、DATE_FROM、DATE_TO 对结果进行分组,并从价格和与最低价格关联的价格名称中选择最低值?
所以结果是
CK1 22-12-2012 29-12-2012 800 low
CK2 22-12-2012 29-12-2012 1400 high
从上一个问题我可以做到:
select id, date_from, date_to, min(price)
from table
group by id, date_from, date_to
如何扩展它以仅选择与 min(price) 匹配的 priceName?按 priceName 分组将不起作用,因为它不受 min(price) 的限制。
【问题讨论】:
-
您的表是否有某种 row_id 主键或复合键(id、date_from、date_to、price)?您可以将查询包装在 CTE 中,并根据主查询中的该键获取缺失的 praceName。
WITH cte AS (SELECT uniqueId, ...) SELECT * FROM table_name t JOIN cte c ON t.uniqueId = c.uniqueId -
它是一个复合键:id、date_from、date_to(不是价格)。
标签: sql-server-2008 tsql group-by