根据日期计算计算

时间:2014-01-17 07:28:06

标签: sql oracle

我有这个查询,我从三个不同的表中计算值,并从每个表中获取两列,日期和计数。获得3个记录,前12个为第二个,12个为第三个。最后,我从所有这些表中的计数列进行了一些计算,其中第二列的日期是找到匹配项。

例如,如果第一个表列的日期与第二个和第三个列匹配,我将添加所有这些值并获得它的百分比...虽然我已经为它创建了一个查询...但是它得到了正确的数据.. < / p>

我需要知道如何在日期的基础上执行此表的计算..我正在使用oracle DB

SELECT TRUNC(ans.date),
  (a.count1+b.count2+c.count3)*100/count4 AS status
FROM
  (SELECT COUNT(pans.actual)count1,
          TRUNC(ans.date) AS subdate
  FROM pans, ans
  WHERE pans.actres ='1'
    AND TRUNC(anss.date) > sysdate-100
    AND pans.id = anss.id
  GROUP BY TRUNC(anss.date)
  )a,
  (SELECT COUNT(conans.actres)count2,
         TRUNC(anss.date) AS subdate
  FROM conans, anss
  WHERE conans.actres ='1'
    AND TRUNC(anss.date) > sysdate-100
    AND conans.id = anss.id
  GROUP BY TRUNC(anss.date)
  )b,
  (SELECT COUNT(anss.submitted)count3,
          TRUNC(anss.date) AS subdate
  FROM anss
  WHERE submitted = 1
    AND TRUNC(anss.date) > sysdate-100
  GROUP BY TRUNC(anss.date)
  )c,
  (SELECT COUNT(pans.actres) count4
  FROM pans, anss
  WHERE anss.date > sysdate-100
  )d,
  anss,
  pans
WHERE a.subdate = b.subdate
  AND b.subdate = c.subdate
  AND a.subdate = c.subdate
  AND TRUNC(anss.date) > sysdate-100
GROUP BY TRUNC(anss.date),a.count1,b.count2,c.count3,d.count4


count1 
------------------
count |  date
3     |  12/12/1928
5     |   12/12/1998
6     |  12/12/1995


count2 
------------------
count|  date
3    |  12/12/1928
5    |   12/12/1998
6    |  12/12/1995
23   |  12/12/1924
56   |  12/12/1993
68   |  12/12/1992
39   |  12/12/1921
58   |  12/12/1990
63   |  12/12/1999


count3
------------------
count|    date
3    |  12/12/1928
5    |   12/12/1998
6    |  12/12/1995
23   |  12/12/1924
56   |  12/12/1993
68   |  12/12/1992
39   |  12/12/1921
58   |  12/12/1990
63   |  12/12/1999


count4
------------------
4500

现在我必须计算

(count1+count2+count3)*100/count4
when count1.date=count2date=count3.date

HTH

1 个答案:

答案 0 :(得分:0)

您获取过去100天的所有anns记录并交叉加入平底锅。这个交叉连接是否需要? (最好使用ANSI连接语法来避免意外的交叉连接。)

您可以找到所有a,b和c中的所有日期并相应地加入。

您与anns-pans交叉连接交叉加入a-b-c联接。再说一次:你真的想在这里交叉加入吗?你按照anns.date进行分组(顺便说一下,日期是一个坏名称,因为它是一个关键字),但anns.date与检索到的记录有什么关系?

从语法上讲,你的陈述看起来是正确的,但我不信任你的联接: - )