假设我有一个表values
,看起来像:
id|field_id|value|date
1 |1 |2 |2013-06-01
2 |2 |5 |2013-06-01
3 |1 |3 |2013-06-02
4 |2 |9 |2013-06-02
5 |1 |6 |2013-06-03
6 |2 |4 |2013-06-03
还有另一个表
fields
,看起来像id|code
1 |small_value
2 |large_value
我想从
values
中选择small_value
大于同一large_value
上的date
的行。因此对于上面的示例,由于6
(field_id
= 1
== small_value
)> 4
(field_id
= 2
== )。数据库是Microsoft SQL Server 2012。
谢谢你的帮助
最佳答案
怎么样
SELECT *
FROM [values] v
WHERE EXISTS(
SELECT 1
FROM [values] vl
WHERE vl.FIELD_ID = 2
AND vl.date = v.date
AND vl.value < v.value
)
AND v.FIELD_ID = 1
SQL Fiddle DEMO
这是另一个可能的例子
SELECT *
FROM [values] vs INNER JOIN
[values] vl ON vs.date = vl.date AND vs.FIELD_ID = 1 AND vl.FIELD_ID = 2
WHERE vs.value > vl.value
SQL Fiddle DEMO