mysql - 如何根据时间戳和 bool 值查询记录?

标签 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 非常陌生,我尝试过使用 group by student_id 但我不知道该使用哪个聚合函数以及如何在分组后检查所有记录的 bool 字段。

最佳答案

我的 SQL 方法,不需要子查询或任何东西,因为如果所有记录都为 false,则 MAX(timestamp) 也为 false。如果您没有限制所有记录,您仍然可以使用条件聚合来查找MAX(假时间戳)

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'

关于mysql - 如何根据时间戳和 bool 值查询记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792741/

相关文章:

mysql - 创建一个表,但在复合键中包含其他实体?

python - 如何检查数据库中是否创建了用户并将其删除

java - 如何将 MySQL 数据库中的 id 解析为变量

sql - 如何在一个sql查询中生成多个时间序列?

sql - 如何翻译 Postgresql 9.3 查询以在 Postgresql 8.4 上使用?

c# - MySQL插入 double 值时出现问题

php - $_GET 创建产品页面

PHP 将memberid 与目录匹配

sql - 你能解释一下下面的 SQL (postgres) 代码吗?

postgresql - UNION ALL,将 NULL 转换为 double ,Postgres