【发布时间】:2016-08-25 08:20:48
【问题描述】:
对于我的具体情况,n = 4,但可能有一天需要 n=5 或 n=6。
我需要什么的顶级描述:我有一个表单,可以让我在跳转日志中添加姓名和日期。我需要构建一个查询,该查询将显示每个跳线的四个最近的跳跃,每个日期都有一列。
我的表单将数据存储在“JUMP”表中,该表有 3 个字段:JUMPID、NAME、DATE。示例数据如下所示:
JUMPID NAME DATE
1 Joe 01-Jul-16
2 Joe 15-Jul-16
3 Adam 15-Jul-16
4 Joe 26-Jul-16
5 Ryan 28-Jul-16
6 Adam 02-Aug-16
7 Joe 10-Aug-16
8 Adam 10-Aug-16
9 Joe 12-Aug-16
10 Mike 19-Aug-16
11 Joe 19-Aug-16
12 Mike 19-Aug-16
13 Dave 19-Aug-16
14 Ryan 23-Aug-16
我现在使用的查询返回每个跳线的最近 4 次跳跃,但将所有日期存储在同一列中。查询是:
Select NAME, [DATE]
From [JUMP]
Where DATE In
(Select Top 4 [DATE]
From [JUMP] jum
Where [JUMP].[NAME] = jum.[NAME]
Order By jum.[DATE] DESC;)
Order By NAME, [DATE] DESC;
此查询的输出显示如下:
NAME DATE
Adam 10-Aug-16
Adam 02-Aug-16
Adam 15-Jul-16
Dave 19-Aug-16
Joe 19-Aug-16
Joe 12-Aug-16
Joe 10-Aug-16
Joe 26-Jul-16
Mike 19-Aug-16
Mike 19-Aug-16
Ryan 23-Aug-16
Ryan 28-Jul-16
我想要的是这 4 个最近的跳转,每个跳转都有自己的列,如下所示:
NAME RECENT1 RECENT2 RECENT3 RECENT4
Adam 10-Aug-16 02-Aug-16 15-Jul-16
Dave 19-Aug-16
Joe 19-Aug-16 12-Aug-16 10-Aug-16 26-Jul-16
Mike 19-Aug-16 19-Aug-16
Ryan 23-Aug-16 28-Jul-16
重复日期是可以的,因为同一跳线可能一天跳不止一次。对于跳跃次数少于 4 次的跳跃者,空字段或 null 字段适用于日期。
通过使用谷歌帮助我构建上面找到的查询,我已经完成了一半。非常感谢任何有助于达到我首选的最终状态的帮助。
【问题讨论】:
-
我删除了不兼容的数据库标签。请为您真正使用的数据库添加标签。
-
这是在 MS Access 2007 中使用的,这就是我添加访问标签的原因。我不确定 MySQL 标签。
-
您需要 sql 进行数据透视。很多例子可以在这里找到或者只是用谷歌搜索。 MS Access 专门有 TRANSFORM
-
在一般情况下,我对 SQL 和 Access 有点陌生。我一直在学习。我将开始通过 Transform 方法寻找解决方案。感谢您的意见。