对于我的具体情况,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次的跳转,可以将字段设置为空或空。
我已经使用了谷歌的一半,它帮助我构建了上面的查询。任何帮助我达到我首选的最终状态的帮助都将非常感激。
我花了几个小时试图使用转换解决我的问题。。。Serg建议的MS Access中的PIVOT方法未成功。我认为这主要是因为缺少一个额外的字段,将每个跳跃分类为最近的1、2、3、4或不再跟踪。我想不出一种方法可以做到这一点,而不更新每个跳投者每次跳投时的记录。在这方面我可能是错的,我不确定,因为我又不是专家。如果有一种方法可以将值1、2、3、4分配给原始查询作为计算字段(?)返回的每个跳转,我会使用转换方法。
也就是说,我确实找到了一个大部分有效但在我看来很笨拙的解决方案。我这么说主要是因为如果跳转者一天跳一次以上,它就会崩溃。我的部分解决方案包括创建4个单独的查询来分别识别第一、第二、第三和第四次最近的跳转,然后将这4个查询组合成最终查询。
这四个查询如下所示:
Select NAME, DATE
From JUMP As jum
Where (
Select Count(NAME)
From JUMP
Where NAME = jum.NAME
AND DATE > jum.DATE) = 0; (0 gives me most recent, 1 second most recent, etc.)
在这个stackoverflow问题上,Charles Bretana负责这个查询。我真的不明白它是如何做到这一点的,但它能满足我的需要,除非跳投有一次以上的跳跃。
然后使用这4个查询,我构建了另一个将4合并为1的查询。此查询如下所示:
SELECT Query1.NAME, Query1.DATE, Query2.DATE, Query3.DATE, Query4.DATE
FROM ((Query2 RIGHT JOIN Query1 ON Query2.NAME=Query1.NAME)
LEFT JOIN Query3 ON Query1.NAME = Query3.NAME)
LEFT JOIN Query4 ON Query1.NAME = Query4.NAME
ORDER BY query1.NAME;
这为我提供了所需格式的数据:包含名称的行和4列,每个行用于最近的第1次/第2次/第3次/第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
Mike 19-Aug-16
Ryan 23-Aug-16 28-Jul-16
如果有更优雅的解决方案,我很乐意看到。或者,如果有人知道如何解决我一天内跳转不止一次的问题,我希望得到一些帮助。谢谢
问题内容: 我试图弄清楚如何编写一个MySQL查询,该查询将返回日期最近的3个事件。 这是我的桌子: 因此,查询结果应为ID的1,2,5,因为它们是与当前日期相比最接近的ID。 编辑: 查询应该只找到将来的事件。 问题答案: 这意味着1天前的事件与将来1天的事件一样接近。如果您只想要尚未发生的事件,请执行
假设我有一个像下面这样的数据,有名称、类和日期 我正在寻找一个输出,这将给我的每个名字的值计数,他们各自的等级和最早的日期和最新的日期。我的输出是, 我能够找到每个名字的计数, 但无法在“日期”列中找到“最早日期”和“最晚日期”。 有人能帮我吗?
问题内容: 我有以下查询,它为每个查询获取最新的N : 我有指标的,,。 这是我想出的唯一解决方案,每个站最多可以获取单个记录。但是,它非常慢(81000条记录的表为154.0毫秒)。 如何加快查询速度? 问题答案: 假设至少Postgres 9.3。 指数 首先,多列索引将有助于: 的拟合度稍好一些,但如果不使用,索引仍将以几乎相同的速度向后扫描。 假设已定义,否则在索引 和 查询中考虑: Po
问题内容: 我在Postgres 9.3数据库中有一个方案,在该方案中,我必须获取出售书籍的最近10个日期。考虑以下示例: table中目前没有任何限制,但是我们有一项服务,每天只插入一个计数。 我必须获得基于的结果。当我传递ID时,应使用书名,出售日期和出售份数生成报告。 所需的输出: 问题答案: 这看起来并不令人怀疑,但这 是个难题 。 假设条件 你的数目是。 表格中的所有列均已定义。 该表在
问题内容: 我有以下数据框: 我需要以某种方式重塑数据框,以使每个id的前3列具有最高的值。结果将是这样的: 它显示了每本广告的前三名最畅销书。我已经使用R中的包完成了此操作,但是我正在寻找等效的pandas。 问题答案: 您可以用来查找每一行的 n个 最大项的索引: 产量
问题内容: 我有一张桌子上有用户帖子。我需要显示每天每位用户从1到最多n条帖子。 例子: 我需要一个查询,例如返回每个用户每天最多2条帖子的查询: 我尝试使用GROUP和HAVING,但是我仅获得前n个记录,而不是每个用户每天的前n个记录: 问题答案: 试试这个糟糕的SQL代码:) 结果: 在这里摆弄。 我认为如果按日期降序排序会更合适,因为实际上是最接近当前日期的前2位。