Sql 从一个日期的流量总和减去另一个日期的流量总和?

Sql 从一个日期的流量总和减去另一个日期的流量总和?,sql,oracle,date,sum,Sql,Oracle,Date,Sum,我需要帮助,弄清楚如何编写一个查询,该查询将查找两个特定日期的流的总值,并从另一个日期中减去一个 基本上,我需要找到2015年10月30日的流量总和,然后从2014年12月31日的流量总和中减去,以获得年初至今的变化。下面的问题是我到目前为止的问题。它给了我那一天所需要的东西,但是现在我需要能够运行计算,以便得到YTD SELECT * FROM (SELECT NAME, SUM(FLOWS/1000000.00) AS FLOWS FROM HISTORY_TBL1 WHERE DATE

我需要帮助,弄清楚如何编写一个查询,该查询将查找两个特定日期的流的总值,并从另一个日期中减去一个

基本上,我需要找到2015年10月30日的流量总和,然后从2014年12月31日的流量总和中减去,以获得年初至今的变化。下面的问题是我到目前为止的问题。它给了我那一天所需要的东西,但是现在我需要能够运行计算,以便得到YTD

SELECT * 
FROM (SELECT NAME, SUM(FLOWS/1000000.00) AS FLOWS
FROM HISTORY_TBL1
WHERE DATE = TO_DATE('10302015','MMDDYYYY')
GROUP BY NAME
ORDER BY FLOWS DESC)
WHERE ROWNUM <=10

您可以使用条件聚合来获取这两个值及其差异:

SELECT NAME,
       SUM(CASE WHEN DATE = DATE '2014-12-31' THEN FLOWS END)/1000000.00 AS FLOWS_20141231,
       SUM(CASE WHEN DATE = DATE '2015-10-30' THEN FLOWS END)/1000000.00 AS FLOWS_20151030,
       SUM(CASE WHEN DATE = DATE '2015-10-30' THEN FLOWS
                WHEN DATE = DATE '2014-12-31' THEN - FLOWS
           END)/1000000.00 AS FLOWS_DIFF,
FROM HISTORY_TBL1
WHERE DATE IN (DATE '2015-10-30',  DATE '2014-12-31')
GROUP BY NAME;

我不知道您想对reults做什么。

为什么需要按名称分组部分??因为问题中没有提到它。@nabeel Its,因为每个产品在任何特定日期都可能有多个值,我需要将每个名称的所有交易分组在一起,并且每个产品名称每天的总和值的结果集我需要能够计算YTD变化。这意味着我需要取2015年10月30日最后一个工作日的总价值,然后减去2014年12月31日最后一个工作日的总价值。这个等式的结果就是YTD的变化。我想你误解了我在看什么,如果我的问题不清楚,我很抱歉。我只想得到2015年10月30日每个名字的总数,然后减去2014年12月31日每个名字的总数。我只需要能够编写一个查询来进行简单的计算,这样我就可以避免在excel中进行计算。这正是这个查询返回的结果,31-DEC的计数减去30-oct的计数。我运行了这个查询,它给了我一个两列的结果集。名为name的列包含了我所有的产品,名为FLOWS\u DEC\u MINUS\u OCT的列给出了每个产品的-1结果集。基本上,结果集根本没有任何计算。我也不明白为什么我在寻找总数时需要计数!答案更新为正确的数据/格式和总和,而不是计数
SELECT NAME,
       SUM(
          CASE 
          WHEN DATE=TO_DATE('10302015','MMDDYYYY') THEN FLOWS    -- the bigger number
          WHEN DATE=TO_DATE('12312014','MMDDYYYY') THEN FLOWS * -1 -- minus the smaller number
          ELSE 0 
          END
       )/1000000.00 AS FLOWS_2015_minus_2014
FROM HISTORY_TBL1
WHERE DATE IN ( TO_DATE('10302015','MMDDYYYY'),
        TO_DATE('12312014','MMDDYYYY'))
GROUP BY NAME;