2014年4月4日金曜日

SQLでテーブルの最終更新日時か、テーブルが空の場合は適当な値を返す

PostgreSQLで行いました。タイトルの通り、テーブルの最も新しい更新日時か、テーブルが空の場合には指定した値を返します。
SELECT
    updated_at
FROM (
    (
        SELECT updated_at
        FROM sample_table
        ORDER BY updated_at DESC
        LIMIT 1
    )
    UNION
    SELECT '1970-01-01 00:00:00' AS updated_at
) AS sample
ORDER BY updated_at DESC
LIMIT 1
;
これでできます。 例えば
CREATE TABLE sample_table (
    id SERIAL NOT NULL,
    updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
    created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
);
この構造の空テーブルがあるときに実行すると
     updated_at      
---------------------
 1970-01-01 00:00:00
(1 row)

こうなります。
INSERT INTO sample_table (updated_at, created_at) VALUES (NOW(), NOW());
適当に挿入した後に実行すると
         updated_at         
----------------------------
 2014-04-03 15:07:44.447706
(1 row)

こうなります。

0 件のコメント:

コメントを投稿