我有一个名为 recruits 的表,其中的列包括 first , last 和 class 。 第一个和 last 列分别是主键,分别代表一个新的名字和姓氏。 class 列是新兵提交的年份。请注意,同一个类中可能有多个新兵,即具有相同的 class 值。
我希望显示最近一堂课的所有记录 - 无论它是什么 - 以及前四个班/年的记录。我真的不想对特定年份进行硬编码,因为每当新的课程/年出现时我都会手动更改它。
感谢任何帮助。如果我的描述太模糊,请告诉我。
编辑:我只是在使用MySQL / Apache朋友答案 0 :(得分:1)
假设您将年份存储为2006
或2011
以及您使用的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。