假设我有一个表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的行。因此对于上面的示例,由于6field_id = 1 == small_value)> 4field_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

10-02 11:39