SQL - 比较2个不同的日期范围

时间:2016-06-08 06:56:26

标签: sql oracle

该表包含以下列:

DATA,CODE等..

我需要显示两个不同的日期范围及其代码,如:

|数据|代码| DATA2 |代码|

我的查询是:

SELECT DATA,CODE
FROM people
WHERE DATA >= ${data1} AND DATA <= ${data2}
GROUP BY DATA
ORDER BY DATA

我所做的是尝试使用不同的变量进行2次查询,但两者都返回相同的数据范围。 所以我做了类似的事情:

SELECT DATA,CODE
FROM people
WHERE DATA >= ${d1} AND DATA <= ${d2}
GROUP BY DATA
ORDER BY DATA

并尝试分配4个不同的日期以获得2个周期范围。让我们想象data1='01-01-2001'data2='31-12-2001' d1='01-01-2002'd2='31-12-2002'
当我分配日期时,两者都只返回最后一个范围。

所以我没有得到 | 2001 | code | 2002 | code | ,而是 | 2002 | code | 2002 | code |
我需要进行比较,所以我想比较左边的2001年的每一天和右边的2002年的每一天。

1 个答案:

答案 0 :(得分:0)

使用绑定变量:start1:end1作为第一个范围的边界,使用:start2:end2作为第二个范围的边界:

SELECT d1.data AS data1,
       d1.code AS code1,
       d2.data AS data2,
       d2.code AS code2
FROM   (
  SELECT data,
         code,
         ROW_NUMBER() OVER ( ORDER BY data ) AS rn
  FROM   people
  WHERE  data BETWEEN :start1 AND :end1
) d1
FULL OUTER JOIN
(
  SELECT data,
         code,
         ROW_NUMBER() OVER ( ORDER BY data ) AS rn
  FROM   people
  WHERE  data BETWEEN :start2 AND :end2
) d2
ON ( d1.rn = d2.rn )