SQL 按最近日期和销售额分组
SQL Group By most recent date and sales value
我有以下销售额 table,显示客户 ID、他们的姓名、订单金额和订单日期。
ID
Name
Order
Date
1
A
25
11/10/2006
1
A
10
5/25/2010
1
A
10
6/18/2018
2
B
20
3/31/2008
2
B
15
11/15/2010
3
C
35
1/1/2019
3
C
20
4/12/2007
3
C
10
3/20/2010
3
C
5
10/19/2012
4
D
15
12/12/2013
4
D
15
2/18/2010
5
E
25
12/11/2006
6
F
10
5/1/2016
我正在尝试对数据进行分组,以便对于每个客户,它只会向我显示他们最近的订单和金额,如下所示:
ID
Name
Order
Date
1
A
10
6/18/2018
2
B
15
11/15/2010
3
C
35
1/1/2019
4
D
15
12/12/2013
5
E
25
12/11/2006
6
F
10
5/1/2016
到目前为止,我只能按 ID 和名称分组,因为添加订单列也会按该列分组。
SELECT
ID,
Name,
MAX(Date) 'Most recent date'
FROM Table
GROUP BY Customer, Customer
我怎样才能同时为每个客户添加订单金额?
您可以为最大日期使用子查询
SELECT
ID,
姓名,
最大(日期)'Most recent date'
来自 Table
按客户分组,客户
select a.ID, a.Name, b.max_date
from Table a
inner join (
select name, max(Date) max_date
from Table
group by name
) b on a. name = b.name and a.date = b.max_date
SELECT ID, Name, Order, Date FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Date DESC) AS sn
FROM your_table_name
) A WHERE sn = 1;
您可以使用此查询获得预期结果:
SELECT S.*
FROM Sales S
CROSS APPLY
(
SELECT ID, Max(Date) MaxDate
FROM Sales
GROUP BY ID
)T
WHERE S.ID = T.ID
AND S.Date = T.MaxDate
ORDER BY S.ID
我有以下销售额 table,显示客户 ID、他们的姓名、订单金额和订单日期。
ID | Name | Order | Date |
---|---|---|---|
1 | A | 25 | 11/10/2006 |
1 | A | 10 | 5/25/2010 |
1 | A | 10 | 6/18/2018 |
2 | B | 20 | 3/31/2008 |
2 | B | 15 | 11/15/2010 |
3 | C | 35 | 1/1/2019 |
3 | C | 20 | 4/12/2007 |
3 | C | 10 | 3/20/2010 |
3 | C | 5 | 10/19/2012 |
4 | D | 15 | 12/12/2013 |
4 | D | 15 | 2/18/2010 |
5 | E | 25 | 12/11/2006 |
6 | F | 10 | 5/1/2016 |
我正在尝试对数据进行分组,以便对于每个客户,它只会向我显示他们最近的订单和金额,如下所示:
ID | Name | Order | Date |
---|---|---|---|
1 | A | 10 | 6/18/2018 |
2 | B | 15 | 11/15/2010 |
3 | C | 35 | 1/1/2019 |
4 | D | 15 | 12/12/2013 |
5 | E | 25 | 12/11/2006 |
6 | F | 10 | 5/1/2016 |
到目前为止,我只能按 ID 和名称分组,因为添加订单列也会按该列分组。
SELECT
ID,
Name,
MAX(Date) 'Most recent date'
FROM Table
GROUP BY Customer, Customer
我怎样才能同时为每个客户添加订单金额?
您可以为最大日期使用子查询 SELECT ID, 姓名, 最大(日期)'Most recent date' 来自 Table 按客户分组,客户
select a.ID, a.Name, b.max_date
from Table a
inner join (
select name, max(Date) max_date
from Table
group by name
) b on a. name = b.name and a.date = b.max_date
SELECT ID, Name, Order, Date FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Date DESC) AS sn
FROM your_table_name
) A WHERE sn = 1;
您可以使用此查询获得预期结果:
SELECT S.*
FROM Sales S
CROSS APPLY
(
SELECT ID, Max(Date) MaxDate
FROM Sales
GROUP BY ID
)T
WHERE S.ID = T.ID
AND S.Date = T.MaxDate
ORDER BY S.ID