【问题标题】:count calculation on the basis of date基于日期的计数计算
【发布时间】:2014-01-17 07:28:06
【问题描述】:

我有这个查询,我正在计算三个不同表中的值并从每个表中获取两列、日期和计数。获得 3 条记录,前 12 条,第 12 条,第 12 条,第 3 条。最后,我从所有这些表中的这些计数列中进行很少的计算,其中第二列的日期正在寻找匹配项。

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

我需要知道如何根据日期从这张表中执行计算。我正在使用 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

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

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

    您找到所有存在于 a、b 和 c 中的所有日期并相应地加入。

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

    从语法上讲,您的陈述看起来是正确的,但我不相信您的加入 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多