【问题标题】:oracle SQL select from this date_id to this date_idoracle SQL select from this date_id to this date_id
【发布时间】:2016-02-05 05:59:28
【问题描述】:

我必须显示 2011-2014 年表格中的数据。该表具有另一个名为 time 的表的时间 ID,该表存储实际年份。 我有从这个日期 ID 到日期 ID 中选择数据的声明。

SELECT sum(no_of_placements)
  FROM fact_accounts
 WHERE
  (SELECT account_dim.account_id FROM account_dim WHERE account_dim.account_name = 'DCompany1')
     = fact_accounts.fk2
  AND (
       (SELECT time_dim.time_id FROM time_dim WHERE time_dim.year = 2011)
          = fact_accounts.fk1_time_id
    OR (SELECT time_dim.time_id FROM time_dim WHERE time_dim.year = 2012)
          = fact_accounts.fk1_time_id
    OR (SELECT time_dim.time_id FROM time_dim WHERE time_dim.year = 2013)
          = fact_accounts.fk1_time_id
    OR (SELECT time_dim.time_id FROM time_dim WHERE time_dim.year = 2014)
          = fact_accounts.fk1_time_id
  )
GROUP BY fact_accounts.no_of_placements

如何在不设置条件以匹配 time_id 的情况下实现相同的目标?如果年份范围较大,这似乎无效。

【问题讨论】:

    标签: sql database oracle query-optimization


    【解决方案1】:
    SELECT sum(no_of_placements)
    FROM fact_accounts, account_dim, time_dim 
    WHERE account_dim.account_id = fact_accounts.fk2
    AND account_dim.account_name = 'DCompany1'  
    AND fact_accounts.FK1_TIME_ID = time_dim.time_id
    AND time_dim.year BETWEEN 2011 AND 2014
    
    GROUP BY fact_accounts.no_of_placements
    

    SELECT sum(no_of_placements)
        FROM fact_accounts,  
        WHERE
        (select account_dim.account_id FROM account_dim WHERE account_dim.account_name = 'DCompany1') = fact_accounts.fk2
    
    AND fact_accounts.FK1_TIME_ID IN
    (select time_dim.time_id from time_dim WHERE 
    time_dim.year BETWEEN 2011 AND 2014)
    
    GROUP BY fact_accounts.no_of_placements
    

    但是为什么你们既要按 no_of_placements 求和又要按 no_of_placements 分组呢?这对我来说毫无意义。

    【讨论】:

    • 非常感谢!我首先只分组,但它只从一行返回 no_of_placements 并且没有聚合它。所以我使用了 sum 函数。
    猜你喜欢
    • 1970-01-01
    • 2022-12-27
    • 2014-12-12
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多