0

データベースがあり、その構造は次のようになります。

  1. テーブルの名前はValues
  2. そのテーブルの列は次のとおりです。Key, Attribute, Value
  3. Anobjectは、同じ を共有する一連の行ですKey

例えば:

ROWID   Key                                     Attribute   Value
*****   ************************************    *********   ***********************
1       9847CAD7-C430-4401-835B-A7FCE9A33A90    FirstName   Tito
2       9847CAD7-C430-4401-835B-A7FCE9A33A90    CreatedAt   2013-08-03 10:10:23:344
3       9847CAD7-C430-4401-835B-A7FCE9A33A90    UpdatedAt   2013-08-03 11:10:23:344
-----   ------------------------------------    ---------   -----------------------
4       4AE4B3F4-895B-4BF7-90E6-C889DA875D26    FirstName   Tito
5       4AE4B3F4-895B-4BF7-90E6-C889DA875D26    CreatedAt   2013-01-01 10:10:10:344
6       4AE4B3F4-895B-4BF7-90E6-C889DA875D26    UpdatedAt   2013-01-01 10:10:10:344

上記の例では、2 つの「オブジェクト」を一連の「-」で区切って、データがどのように構造化されているかを理解できるようにしています。

目標:UpdatedAt値がその値よりも大きくCreatedAt、両方が同じ を共有するすべての行を選択しますKey。上記の例では、キーの値が の値よりも大きい9847CAD7-C430-4401-835B-A7FCE9A33A90ため、一致させたいと思います(一致は同じ「オブジェクト」内で発生する必要があります)。UpdatedAtCreatedAt

このクエリをどのように達成できるか考えていますか? 助けてくれてありがとう。

4

3 に答える 3

1

これが私のバージョンです:

SELECT Key,
       MAX(CASE WHEN Attribute = 'FirstName' THEN Value END) As "First_Name",
       MAX(CASE WHEN Attribute = 'CreatedAt'  THEN Value END) As "Created_At",
       MAX(CASE WHEN Attribute = 'UpdatedAt'  THEN Value END) As "Updated_At"
FROM Value
GROUP BY Key
HAVING Created_At < Updated_At;

SQL フィドル

一致するオブジェクトのすべての属性が表示されます。

于 2013-08-03T19:02:33.367 に答える
0

なぜ私はあなたの宿題をやっているように感じるのですか?

いずれにせよ、次のようになります。

select o1.* from objects o1 
join objects o2 on o1.key = o2.key
where o1.attribute = "UpdatedAt"
and o2.attribute = "CreatedAt"
and o1.value > o2.value;

どちらが表示されますか:

3    9847CAD7-C430-4401-835B-A7FCE9A33A90    UpdatedAt    2013-08-03 11:10:23
  • ジェフ・ワイス
于 2013-08-03T19:01:51.643 に答える