SQL - 选择一列比同一日期的其他列大的行

rwb*_*rwb 2 sql sql-server

说我有一张桌子,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
Run Code Online (Sandbox Code Playgroud)

另一张表,fields看起来像

id|code
1 |small_value
2 |large_value
Run Code Online (Sandbox Code Playgroud)

我想从values哪里选择small_value大于large_value相同的行date.因此,对于上面的示例,查询应返回自from 6,(field_id= 1== small_value)> 4(field_id= 2== large_value)以来的最后两行.

数据库是Microsoft SQL Server 2012.

谢谢你的帮助

Adr*_*der 8

怎么样的

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle DEMO