我有一张表,其中包含与特定日期绑定的不同商品。取决于价格变化的日期。我希望得到每个日期最便宜的交易。
我的问题是我使用了一个小组:
选择价格,按日期分类交易日期,价格
要显示商品,我需要更多不在group by子句中的记录。最好的字段是我的autoid,所以如果客户选择具有特定价格的优惠,我可以使用第二个选择显示此优惠及其所有字段。
我希望这样可以更简单地回答我的问题。我尽量保持它的通用性,但我感觉它没有被描述得足够清晰: - )
答案 0 :(得分:2)
只需将Id
列添加到GROUP BY
列表
SELECT id, date, price
FROM products
GROUP BY id, date, price
否则,Sql Server无法识别要按价格和日期行分组的ID,例如考虑以下两行:
1 | 10-10-2010 | 100 |
2 | 10-10-2010 | 100 |
对于按日期和价格分组的行,应选择哪个Id
值?
??? | 10-10-2010 | 100 |
答案 1 :(得分:1)
您需要在ID上指定aggregate function或将其添加到您的group by子句中,例如@sll建议。汇总示例:
SELECT MAX(id), date, price
FROM products
GROUP BY date, price
答案 2 :(得分:1)
如果您从选择条款中删除 ID ,您将获得日期和价格<的所有不同夫妇的列表/强>
如果您将 ID 添加到 Group By 子句中,因为它是一个标识,您将获得表中每条记录的一行,以便您的< em> Group By 子句没用。
第三种方法是在选择子句中使用 id 上的聚合函数为每个组获取一个值(第一个,最小值,最大值,等)。
答案 3 :(得分:0)
当您进行计数等时,Hi Group by非常有用。
SELECT [Display Billing Provider], [Display Insurance Category]
, SUM([TOTAL RVUs]) AS RVUs_08
, SUM([Units]) AS Units_08
, SUM(Payments) AS Payments_08
FROM dbo.ProductivityAnal_2008
GROUP BY [Display Billing Provider],[Display Insurance Category]
ORDER BY [Display Billing Provider],[Display Insurance Category]
谢谢安倍