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

在上面的示例中,我用一系列“-”分隔了两个“对象”,以帮助理解数据的结构。

目标:选择其UpdatedAt值大于其CreatedAt值且共享相同的所有行Key。在上面的例子中,我想匹配 Key9847CAD7-C430-4401-835B-A7FCE9A33A90因为它的UpdatedAt值大于值CreatedAt(匹配应该发生在同一个“对象”内。)

知道如何完成此查询吗?在此先感谢您的帮助。

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 回答
1
select 
t1.key
from
Table1 t1
inner join Table1 t2 on t1.key = t2.key 
where t1.Attribute = 'CreatedAt' and t2.Attribute = 'UpdatedAt'
and t1.value < t2.value
于 2013-08-03T18:46:32.380 回答
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 回答