如何根据时间戳和布尔值查询记录?

时间:2016-11-24 18:28:49

标签: mysql sql postgresql

我有一张付款表,我正在存储付款相关数据。

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组,但我不知道使用哪个聚合函数以及如何在分组后检查所有记录的布尔字段。

2 个答案:

答案 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;