SQL查询选择过去5年的所有记录

时间:2011-02-15 16:51:01

标签: mysql

我有一个名为 recruits 的表,其中的列包括 first last class 第一个 last 列分别是主键,分别代表一个新的名字和姓氏。 class 列是新兵提交的年份。请注意,同一个类中可能有多个新兵,即具有相同的 class 值。

我希望显示最近一堂课的所有记录 - 无论它是什么 - 以及前四个班/年的记录。我真的不想对特定年份进行硬编码,因为每当新的课程/年出现时我都会手动更改它。

感谢任何帮助。如果我的描述太模糊,请告诉我。

编辑:我只是在使用MySQL / Apache朋友

5 个答案:

答案 0 :(得分:1)

假设您将年份存储为20062011以及您使用的TSQL

select 
    First, Last, Class
From
    recruits
where
    class > datepart(yy,getdate())-5

这将使你加入2006年后的任何人

答案 1 :(得分:1)

使用第一个+最后一个作为PK意味着一个人不能被多次招募。它还阻止了第二个John Doe在另一个人已经在前一年招募的时候招聘。

select r.*
from
(
    # The 5 most recent classes
    select class
    from recruits
    group by class
    order by class desc
    limit 5
) c
inner join recruits r on r.class = c.class
order by class desc, `first`, `last`

我认为你的意思是过去5年目前的数据,而不是过去5个日历年。

答案 2 :(得分:0)

由于您没有提供特定的SQL服务器,您可以尝试这个(应该适用于许多RDBMS):

select *
  from recruits where class in
     (select distinct class from recruits order by recruits desc limit 2)

答案 3 :(得分:0)

在大多数数据库中,类似

SELECT first, last, class
  FROM (SELECT first, 
               last, 
               class, 
               dense_rank() over (order by class) rank_of_class
          FROM recruits)
 WHERE rank_of_class <= 5

将返回最后5个类值的所有信息。

答案 4 :(得分:0)

听起来像你需要的东西:

Select
    *
From
    recruits
Where 
    class between DatePart(yy, getdate()) and DatePart(yy, getdate()) - 4

可能会得到一个更好的答案,具体取决于您对数据库的使用情况。

这是来自sql server的transact sql。