1

次のようなテーブルがあります。

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 の最新の日付を 3 番目のフィールド ( manual)で選択することだけです (その vending_machine_id にとrealdings のtrue/false両方がある場合)、または.truefalsetruefalse

私はこれをとてもやりました:

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

お気づきのように、私がまだ方法がわからないのは、543vending_machine_id を持つ単一の行と、その行を最後に持つことf/tです。(これidには真と偽の両方の手動読み取りタイプがあるため)。

これを達成する方法はありますか?

4

3 に答える 3

0

試す:

SELECT  vending_machine_id, 
        MAX(timestamp) "TimeStamp",
        array_agg(distinct manual order by manual desc)
FROM    TableName
GROUP   BY vending_machine_id

ここでSQLFiddle 。

于 2013-04-24T14:59:58.537 に答える