问题描述
我的数据集看起来像这样:
|---------------------|------------------|------------------|
| ID | Date | Cost |
|---------------------|------------------|------------------|
| 1 | 9/15/20 | $500 |
|---------------------|------------------|------------------|
| 1 | 9/30/20 | $600 |
|---------------------|------------------|------------------|
| 1 | 10/2/20 | $400 |
|---------------------|------------------|------------------|
| 2 | 10/10/20 | $1,000 |
|---------------------|------------------|------------------|
| 3 | 9/29/20 | $600 |
|---------------------|------------------|------------------|
| 3 | 10/5/20 | $400 |
|---------------------|------------------|------------------|
| 3 | 10/6/20 | $800 |
|---------------------|------------------|------------------|
| 3 | 10/10/20 | $200 |
|---------------------|------------------|------------------|
在Looker中使用SQL Runner,我只希望每个月仅保留每个ID可用的最新日期的行。所以我的示例表应该像这样结束:
|---------------------|------------------|------------------|
| ID | Date | Cost |
|---------------------|------------------|------------------|
| 1 | 9/30/20 | $600 |
|---------------------|------------------|------------------|
| 1 | 10/2/20 | $400 |
|---------------------|------------------|------------------|
| 2 | 10/10/20 | $1,000 |
|---------------------|------------------|------------------|
| 3 | 9/29/20 | $600 |
|---------------------|------------------|------------------|
| 3 | 10/10/20 | $200 |
|---------------------|------------------|------------------|
解决方法
如果您的DBMS支持row_number()
,则可以使用
select id,date,cost from
(
select id,cost,row_number() over(partition by id order by date desc) as rn
from tablename
)A where rn<=2
,
以下内容几乎可以在任何数据库上运行:
select id,month(date),max(date) as latest_date_in_month
from <TABLE>
group by id,month(date)
order by id,month(date)