我有一张付款表,我正在存储付款相关数据。
Student_id is_payment_done timestamp
A111A11 false 2016/11/23 00:00:00
A111A11 false 2016/11/24 12:12:00
A111A11 false 2016/11/24 16:20:11*
B234A12 false
B234A12 false
B124A12 true
B123A12 false
这里我有student_id外键。现在我想针对student_id选择记录is_payment_done=false
,我想显示例如最新记录。在上表A111A11
记录中,所有is_payment_dont=false
和最新记录的时间戳均为2016/11/24 16:20:11*
我是SQL的新手,我尝试使用student_id
组,但我不知道使用哪个聚合函数以及如何在分组后检查所有记录的布尔字段。
答案 0 :(得分:1)
我的SQL方法,不需要子查询或任何东西,因为如果所有记录都是假的,那么MAX(timestamp)
也是假的。如果您没有限制所有记录,您仍然可以使用条件聚合来查找MAX(false timestamp)
。
SELECT
Student_id
,MAX(timestamp) as MaxTimeStamp
FROM
@Payment
GROUP BY
Student_id
HAVING
COUNT(*) = COUNT(CASE WHEN is_payment_done = 'false' THEN 1 END)
但请注意,在您的示例数据中,A111A11,B123A12和B234A12都只有is_payment_done = 'false'
答案 1 :(得分:0)
SELECT *
FROM Payment
WHERE Student_id = 'A111A11' AND
is_payment_done = 'false'
ORDER BY timestamp DESC
LIMIT 1;