我有一个像这样的表:
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/