Gre*_*per 0 sql sql-server visual-studio-2010
我正在使用带有Microsoft SQL Server的VIsual Studio 2010,我正在尝试编写一个查询,该查询将按日期字段重新启动数据库中的(3)最新记录.以下是数据库中包含列的字段;
id | first_name | last_name | 网址| 日期
这是我正在使用的当前查询,但它只返回单个最近的条目;
SELECT id, first_name, last_name, url, MAX(DISTINCT date) AS Expr1
FROM tbl_paystubs
GROUP BY first_name
ORDER BY first_name
Run Code Online (Sandbox Code Playgroud)
如何返回最近的(3)而不是(1)?
您可以找到最大值,然后找到小于最大值的下一个日期,然后找到小于该最大值的下一个日期.使用CTE:
WITH firstDate(id, first_name, last_name, url, date)
as
(
SELECT id, first_name, last_name, url, MAX(DISTINCT date) AS Expr1
FROM tbl_paystubs
GROUP BY t.first_name, t.id, t.last_name, t.url
),
secondDate(id, first_name,Last_name,url,date)
(
SELECT t.id, t.first_name, t.last_name, t.url, MAX(t.date)
FROM tbl_paystubs t
inner join firstDate f
on f.id = t.id
and f.first_Name = t.first_name
and f.last_name = t.last_name
and f.url = t.url
WHERE f.date > t.date
GROUP BY t.first_name, t.id, t.last_name, t.url
),
thirdDate(id, first_name,Last_name,url,date)
(
SELECT t.id, t.first_name, t.last_name, t.url, MAX(t.date)
FROM tbl_paystubs t
inner join secondDate s
on s.id = t.id
and s.first_Name = t.first_name
and s.last_name = t.last_name
and s.url = t.url
WHERE s.date > t.date
GROUP BY t.first_name, t.id, t.last_name, t.url
)
select f.id,
f.first_name,
f.last_name,
f.url,
f.date as "FirstMax",
s.date as "SecondMax",
t.date as "ThirdMax"
from FirstDate f
left outer join SecondDate s
on f.id = s.id
and f.first_Name = s.first_name
and f.last_name = s.last_name
and f.url = s.url
left outer join ThirdDate t
on f.id = t.id
and f.first_Name = t.first_name
and f.last_name = t.last_name
and f.url = t.url
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |