在我的本地网站上,人们可以通过测试,管理员可以看到结果。以前,所有的结果都是显示出来的,但是很难看,所以我决定只显示最后一个通过测试的人。但我被困住了,因为我只能给每个人显示一个结果,但我不能按日期给他排序:(
SELECT * FROM resultateval join personne using (id) group by id
这是为每个人显示一个结果的查询,下面是表。
它应该显示
654321 / 08-06-2018 / 12 : 02 / 5 / 8 / 1
A256589 / 05-06-2018 /13 : 05 / 7 / 10 / 2
谢谢您!
2条答案
按热度按时间41zrol4v1#
因为时间和日期是分开存储的,所以需要执行的查询相对来说比较难看。我们可以使用
ADDTIME
添加heuereeval
时间到了dateeval
日期。然后,这只是一个基本的聚合联接查询:演示
为便于将来参考,请避免将日期和时间分开存储,除非有很好的理由这样做(我在这里没有看到)。
编辑:我担心的是,根据评论,你似乎已经将日期存储为文本。可以使用以下函数调用根据日期文本生成日期:
只需替换原始查询中的
dateeval
与上述通话STR_TO_DATE
它应该还能用。gtlvzcf82#
你所做的是非常错误的。您分组依据
id
,但您选择了所有列。作为id
在联接数据中不是唯一的,这毫无意义,是无效的sql。你不能说:“把钥匙给我dateeval
(等)id
". 你必须这样说:“给我最小值/最大值/平均值dateeval
对于id
".此查询应该会导致错误,但是
ONLY_FULL_GROUP_BY
让我们悄悄地改变这个模式select *
至select id, any_value(dateeval), any_value(heureeval) ...
. 所以你得到任意选取的值,甚至可以来自不同的记录。你想要的是这样的: