0

列名ID、日付、および値を持つテーブルがあります。値は毎日変化すると予想されます。ただし、値が変わらない場合もあります。したがって、値が3日間変更されていないIDを選択するためのSQLクエリを作成したいと思います。以下のように表にします。助けてくれてありがとう。

たとえば、現在の日付は 11 月 29 日です。したがって、クエリは過去 3 日間の値をチェックする必要があります。

    ID   Date   Value
    B99  28nov  400
    B99  27nov  120
    B99  26nov  120
    B99  25nov  300
    A12  28nov  800
    A12  27nov  800
    A12  26nov  800
    A12  25nov  800
    C45  28nov  100
    C45  27nov  260
    C45  26nov  230
    C45  25nov  230

したがって、クエリは A12 を返す必要があります。

4

3 に答える 3

0

変更日を含む列を追加するとどうなりますか?次の条件を使用できます WHERE ((GetDate() - dateOfChange) / 86400) > 3.

于 2012-11-29T04:00:16.647 に答える
0

どうですか

SELECT t1.ID
FROM   Table t1
       INNER JOIN
       Table t2 ON t1.ID=t2.ID AND t2.Date=DATEADD(day, -1, t1.Date) AND t1.Value=t2.Value
       INNER JOIN
       Table t3 ON t1.ID=t3.ID AND t3.Date=DATEADD(day, -2, t1.Date) AND t1.Value=t3.Value
WHERE  t1.Date=@WhateverDateYouWant

値が同じ場合、最初の結合は昨日の同じ ID と一致し、次の結合は前日と一致します。日付を日付として保存していない場合 a) なぜですか? b) テキストも同様に変換する必要があります。

于 2012-11-29T05:27:10.443 に答える
0

RDBMS を指定しませんが、このソリューションはおそらくほとんどのものに置き換えることができます。私は、非null測定値が毎日存在すると仮定しています。

PostgreSQL 9.1 スキーマのセットアップ:

create table foo(id text, changed_on date, val integer);
insert into foo(id, changed_on, val)
values ('B99', to_date('2012-11-28','yyyy-mm-dd'), 400),
       ('B99', to_date('2012-11-27','yyyy-mm-dd'), 120),
       ('B99', to_date('2012-11-26','yyyy-mm-dd'), 120),
       ('B99', to_date('2012-11-25','yyyy-mm-dd'), 300),
       ('A12', to_date('2012-11-28','yyyy-mm-dd'), 800),
       ('A12', to_date('2012-11-27','yyyy-mm-dd'), 800),
       ('A12', to_date('2012-11-26','yyyy-mm-dd'), 800),
       ('A12', to_date('2012-11-25','yyyy-mm-dd'), 800),
       ('B99', to_date('2012-11-28','yyyy-mm-dd'), 100),
       ('B99', to_date('2012-11-27','yyyy-mm-dd'), 260),
       ('B99', to_date('2012-11-26','yyyy-mm-dd'), 230),
       ('B99', to_date('2012-11-25','yyyy-mm-dd'), 230)
;

クエリ:

select id
from foo
where changed_on>=to_date('2012-11-29','yyyy-mm-dd')-3
group by id
having count(distinct val)=1

結果

|  ID |
-------
| A12 |

別の RDBMS の構文を試したり、調整したりしたい場合は、SQL Fiddleを使用してください。

于 2012-11-29T05:52:57.783 に答える