如何获取最大日期及其行的总和 SQL

How to get Max date and sum of its rows SQL

我关注table,

+------+-------------+----------+---------+
| id   | date        | amount   | amount2 |
+------+-------------+----------+---------+
|      |             |          | 500     |
| 1    | 1/1/2020    |  1000    |         |
+------+-------------+----------+---------+
|      |             |          | 100     |
| 1    | 1/3/2020    |  1558    |         |
+------+-------------+----------+---------+
|      |             |          | 200     |
| 1    | 1/3/2020    |   126    |         |
+------+-------------+----------+---------+
|      |             |          | 500     |
| 2    | 2/5/2020    |  4921    |         |
+------+-------------+----------+---------+
|      |             |          | 100     |
| 2    | 2/5/2020    |    15    |         |
+------+-------------+----------+---------+
|      |             |          | 140     |
| 2    | 1/1/2020    |  5951    |         |
+------+-------------+----------+---------+
|      |             |          | 10      |
| 2    | 1/2/2020    |  1588    |         |
+------+-------------+----------+---------+
|      |             |          | 56      |
| 2    | 1/3/2020    |  1568    |         |
+------+-------------+----------+---------+
|      |             |          | 45      |
| 2    | 1/4/2020    | 12558    |         |
+------+-------------+----------+---------+

我需要获取每个 ID 的最大日期及其金额和金额 2 的总和,我该怎么做。根据以上数据,我需要以下输出。

+------+-------------+----------+---------+
|      |             |          | 300     |
| 1    | 1/3/2020    |  1684    |         |
+------+-------------+----------+---------+
|      |             |          | 600     |
| 2    | 2/5/2020    |   4936   |         |
+------+-------------+----------+---------+

我该怎么做。

首先是使用dense_rank()查找最新的行date

dense_rank () over (partition by id order by [date] desc)

之后,只需 group byamount

上的 sum()
select  id, [date], sum(amount), sum(amount2)
from
(
    select  *, 
            dr = dense_rank () over (partition by id order by [date] desc)
    from    your_table
) t
where   dr  = 1
group by id, [date]

汇总并使用 MAX OVER 获取 ID 的最大日期:

select id, [date], sum_amount, sum_amount2 
from
(
  select
    id, [date], sum(amount) as sum_amount, sum(amount2) as sum_amount2,
    max([date]) over (partition by id) as max_date_for_id
  from mytable group by id, [date]
) aggregated
where [date] = max_date_for_id
order by id;