gpt4 book ai didi

MySQL 选择具有最新日期的记录

转载 作者:行者123 更新时间:2023-11-29 02:33:33 24 4
gpt4 key购买 nike

我有两个表:COURSES 和 PERMISSIONS。我正在尝试执行一个 SELECT,它显示给定帐户中给定学生的所有现有类(class)的最新权限值。

现在,我这样做:

SELECT COURSES.NAME, PERMISSIONS.VALUE, PERMISSIONS.TS
FROM COURSES LEFT JOIN PERMISSIONS
ON PERMISSIONS.C_ID = COURSES.C_ID AND PERMISSIONS.S_ID = '12345'
WHERE COURSES.A_ID = 'ABCDE'

我得到的结果是

NAME          |  VALUE  |   TS
-----------------------------------------------
Mathematics | 1 | 2012-01-19 19:13:21
Mathematics | 0 | 2012-01-19 19:13:15
Mathematics | 0 | 2012-01-19 19:20:19
Mathematics | 0 | 2012-01-19 19:20:27
Mathematics | 0 | 2012-01-19 19:21:29
Biology | |

我需要的是仅显示具有最新时间戳 (TS) 的记录,因此它显示如下:

NAME          |  VALUE  |   TS
-----------------------------------------------
Mathematics | 0 | 2012-01-19 19:21:29
Biology | |

我尝试在类(class)名称上使用 GROUP BY 并在时间戳上使用 ORDER BY,但没有找到正确的记录。

有人可以帮忙吗?

最佳答案

您需要使用 HAVING。所以它应该是这样的

SELECT COURSES.NAME, PERMISSIONS.VALUE, PERMISSIONS.TS
FROM COURSES LEFT JOIN PERMISSIONS
ON PERMISSIONS.C_ID = COURSES.C_ID AND PERMISSIONS.S_ID = '12345'
WHERE COURSES.A_ID = 'ABCDE'
GROUP BY COURSES.A_ID
HAVING PERMISSIONS.TS = MAX(PERMISSIONS.TS)

(使用表格结构会更容易)

另一种可能性是相反。加入自身的PERMISSIONS表,找到没有更高时间戳的权限

   SELECT COURSES.NAME, PA.VALUE, PA.TS
FROM COURSES LEFT JOIN PERMISSIONS PA
ON PA.C_ID = COURSES.C_ID AND PA.S_ID = '12345'
WHERE COURSES.A_ID = 'ABCDE'
AND (PA.C_ID == NULL || NOT EXISTS (
SELECT *
FROM PERMISSIONS PB
WHERE PA.C_ID = PB.C_ID AND PB.S_ID = '12345' AND PB.TS > PA.TS))

关于MySQL 选择具有最新日期的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8948949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com