如果我有以下数据:
sale_id sale_date
1 1/5/2010
2 1/8/2010
3 1/16/2010
4 1/28/2010
5 2/2/2010
6 2/21/2010
7 2/29/2010
8 3/3/2010
Run Code Online (Sandbox Code Playgroud)
我想要每个月的第一个和最后一个(每月2个或更少的记录):
期望的输出:
sale_id sale_date
1 1/5/2010
4 1/28/2010
5 2/2/2010
7 2/29/2010
8 3/3/2010
Run Code Online (Sandbox Code Playgroud)
我认为缓慢的一种方法是:
select * from table o
where sale_date in (select max(sale_date) from table where datepart(month+year of sale_date) = datepart(month+year of o.sale_date), select min(sale_date) from table where ... )
Run Code Online (Sandbox Code Playgroud)
WITH T
AS (SELECT sale_id,
sale_date,
ROW_NUMBER() OVER (PARTITION BY Year(sale_date), MONTH(sale_date)
ORDER BY sale_date ASC) RN,
ROW_NUMBER() OVER (PARTITION BY Year(sale_date), MONTH(sale_date)
ORDER BY sale_date DESC) RN2
FROM YourTable)
SELECT sale_id,
sale_date
FROM T
WHERE RN = 1
OR RN2 = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |