【问题标题】:SQL - How to select the latest date of every month?SQL - 如何选择每个月的最新日期?
【发布时间】:2020-12-02 20:26:13
【问题描述】:

我的数据集看起来像这样:

|---------------------|------------------|------------------|
|          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       |
|---------------------|------------------|------------------|

【问题讨论】:

  • 请用您正在运行的数据库标记您的问题:mysql、oracle、sqlserver...?日期函数是高度特定于供应商的。
  • 为什么插入时不更新记录?
  • 如果出现平局怎么办?我的意思是,如果在任何月份有多个记录具有相同的最晚日期。
  • 如果打平,我想保持最高成本。
  • 这能回答你的问题吗? Return just the last day of each month with SQL

标签: sql looker


【解决方案1】:

如果您的 DBMS 支持,您可以使用 row_number()

select id, date, cost from
(
  select id, date, cost,
         row_number() over(partition by id order by date desc) as rn
from tablename
)A where rn<=2

【讨论】:

  • 所以这会返回每个 ID 的最新 2 个条目,我需要每个 ID 每个月的最后一个条目
【解决方案2】:

以下内容几乎可以在任何数据库上运行:

select id, month(date), max(date) as latest_date_in_month
from <TABLE>
group by id, month(date)
order by id, month(date)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多