从group by创建的组中选择一个值

时间:2013-06-21 15:07:38

标签: mysql sql oracle group-by

我有一张表格如下:

bill_id   |   date     | bill_amount
1234      | 20-06-2013 | 800
1200      | 18-06-2013 | 1500
1000      | 15-05-2013 | 2000
950       | 10-05-2013 | 2500
900       | 20-04-2013 | 750

我想显示过去3个月的账单。 如果每月有多个账单,我想显示最近的账单(例如,6月份为bill_id 1234,5月份为1000)。

我可以使用IN查询(通过使用group by for month和year并考虑特定月份的最大bill_id)来执行此操作。但我的问题是,是否可以在单个查询中实现相同的输出?

1 个答案:

答案 0 :(得分:0)

是的,使用substring_index() / group_concat()技巧:

select substring_index(group_concat(bill_id order by date, bill_id desc desc), ',', 1) as bill_id,
       max(date) as date,
       substring_idnex(group-concat(bill_amount order by date, bill_id desc), ',', 1) as bill_amount
from bills
group by year(date), month(date)