如何使用日期字段选择3个最近的行

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

Bil*_*egg 6

您可以找到最大值,然后找到小于最大值的下一个日期,然后找到小于该最大值的下一个日期.使用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)

  • 投票没有评论?来吧,你们有一些尊重. (3认同)