我还没想出如何按日期分组以获得每月1条记录这是我的疑问:
select Date, weight
from Usrs
where usr = b
order by month
返回:
user b
date weight
15/03/2017 18
15/03/2017 14
19/02/2017 19
18/03/2017 9
22/04/2017 24
30/04/2017 33
01/05/2017 15
03/05/2017 30
但我只需要每个月的最后一条记录,所以我想要的就像这样
date weight
15/03/2017 18
19/02/2017 19
18/03/2017 9
30/04/2017 33
03/05/2017 30
任何想法我怎样才能达到目标?
答案 0 :(得分:1)
使用ROW_NUMBER
对每月的记录进行编号,并保留最后的日期。
select date, weight
from
(
select
date, weight,
row_number() over (partition by year(date), month(date) order by date desc) as rn
from Usrs
where usr = 'b'
) numbered
where rn = 1
order by date;
这是标准SQL,适用于SQL Server。但是,它在MySQL中不起作用,因为MySQL没有像ROW_NUMBER
这样的窗函数。您可以使用变量在MySQL中模拟ROW_NUMBER
。查一查;你会在SO上找到很多答案。
另一种选择是选择每月的最大日期,然后选择相应的记录:
select date, weight
from usrs
where usr = 'b'
and date in
(
select max(date)
from usrs
where usr = 'b'
group by year(date), month(date)
);
这又是标准SQL,适用于SQL Server和MySQL。这里必须读取两次表,因此ROW_NUMBER
方法通常是首选方法。