sql - 如何通过sql查询解决复杂的group?

标签 sql postgresql

我有一个像这样的表:

vending_machine_id | timestamp  | manual |
              543  | 2011-06-08 | true |
              543  | 2011-05-05 | false|
              543  | 2010-12-12 | true |
              542  | 2013-01-29 | true |
              542  | 2012-01-29 | true |

我想要的是选择每个 vending_machine_id 的最近日期,第三个字段(manual)有 true/false(如果有两个 true false realdings 该 vending_machine_id、true(如果只有真正的手动读数)或 false

我做了这么多:

SELECT vmrp.vending_machine_id, max(timestamp), readingMethodSelect.readingMethod
FROM vending_machine_reading_product as vmrp,
(select 
    distinct(manual) as readingMethod, vending_machine_id
    FROM vending_machine_reading_product
    WHERE vending_machine_id in (542, 543, 821, 824)
    group by vending_machine_id, readingMethod) as readingMethodSelect
WHERE vmrp.vending_machine_id = readingMethodSelect.vending_machine_id
GROUP BY vmrp.vending_machine_id, readingMethodSelect.readingMethod
ORDER BY vmrp.vending_machine_id, max(timestamp) desc

它打印:

542;"2013-01-29 10:59:47";f
543;"2011-06-08 05:43:26";f
543;"2011-06-08 05:43:26";t
821;"2013-02-12 00:56:56";f
824;"2013-02-11 05:52:55";f

正如您所注意到的,我仍然不知道该怎么做是让 543 vending_machine_id 成为一行,并且该行的末尾是 f/t。 (因为这个id有true和false两种人工阅读类型)。

有什么办法可以做到这一点吗?

最佳答案

SELECT  vending_machine_id, 
        MAX(timestamp) "TimeStamp",
        CASE WHEN COUNT(DISTINCT manual) > 1
            THEN 'True/False'
            ELSE MAX(manual)
        END AS "Manual"
-- WHERE ..add condition here..
FROM    TableName
GROUP   BY vending_machine_id

关于sql - 如何通过sql查询解决复杂的group?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16194756/

相关文章:

mysql - SQL:获取单个表中多行的总和

sql - 递归查询以在postgreSQL中给出路由

mysql - 在同一列中对数据进行分组的 SQL 问题

sql - 在 Spark SQL 中查找表大小(以 MB/GB 为单位)

SQL查找违反UNIQUE的行一起建立索引

node.js - 将 elasticsearch & cassandra 与 postgres 数据库同步

PostgreSQL 错误 : there is no built-in function named "(SQL state 42883)

vb.net - 具有 NULL 值的 Npgsql 参数,vb.net

postgresql - 更改列类型并设置为非空

database - 使用 Cloud App 从本地转储恢复 Heroku 上的数据库