7

我们有 2 个非常简单的 SELECT 语句:

SELECT value from table where date between DATE1 and DATE2
SELECT value from table where date between DATE3 and DATE4

我们需要一种编写单个 SQL 语句的方法,该语句将获取从这两个 SQL 语句返回的“值”的差异。

我们尝试了以下方法,但没有成功:

SELECT value from table where date between DATE1 and DATE2
minus 
SELECT value from table where date between DATE3 and DATE4

任何建议都受到高度赞赏。

4

6 回答 6

16

未经测试但应该可以工作:

SELECT
    (SELECT value from table where date between DATE1 and DATE2) - 
    (SELECT value from table where date between DATE3 and DATE4)
FROM dual;

假设您SELECT value保证返回单个值

于 2012-09-05T07:42:10.413 回答
2
SELECT value FROM TBL WHERE date BETWEEN DATE1 and DATE2 
AND value NOT IN (SELECT value FROM TBL WHERE date BETWEEN DATE3 AND DATE4)
于 2012-09-05T07:27:32.730 回答
2

如果您认为您的内部查询可以给出多个值,请在下面使用

SELECT
    (SELECT sum(value) from table where date between DATE1 and DATE2) - 
    (SELECT sum(value) from table where date between DATE3 and DATE4) as answer
FROM dual;
于 2012-09-05T22:27:37.420 回答
1

请试试这个:

SET SERVEROUTPUT ON
DECLARE
V_FIRST NUMBER := 0;
V_SECOND NUMBER := 0;
BEGIN
  SELECT value into V_FIRST from table where rownum=1 and date between DATE1 and DATE2;
  SELECT value into V_SECOND from table where rownum=1 and date between DATE3 and DATE4;

  DBMS_OUTPUT.PUT_LINE (V_FIRST-V_SECOND); 
END;
于 2012-09-05T07:48:24.733 回答
1
(
SELECT value from table where date between DATE1 and DATE2
 minus 
SELECT value from table where date between DATE3 and DATE4
)
union all
(
SELECT value from table where date between DATE3 and DATE4
 minus 
SELECT value from table where date between DATE1 and DATE2
)
于 2012-09-05T07:55:08.287 回答
1

以下陈述应适用于您的情况

(
SELECT value from table where date between DATE3 and DATE4
 minus 
SELECT value from table where date between DATE1 and DATE2
)
union
(
SELECT value from table where date between DATE1 and DATE2
 minus 
SELECT value from table where date between DATE3 and DATE4
)
于 2012-09-05T09:44:25.073 回答