【问题标题】:Get production data for the last 2 days获取过去 2 天的生产数据
【发布时间】:2014-10-09 10:19:38
【问题描述】:

我有一个关于从两天前获取制造数据的问题。我的代码有效,但我认为我的实现效率低下。我有的是这个,

// YESTERDAYS FABRICATION
            $yesterdaySql = "SELECT SUM(CURRENT_WEIGHT) AS TOTALYESTERDAYWEIGHT FROM FABRICATION_HIST 
                                WHERE TO_CHAR (FAB_ENTRY_DATE,'MM/DD/YYYY') = TO_CHAR(SYSDATE - 1, 'MM/DD/YYYY') 
                                AND PROJECT_NAME = :projName";
            $yesterdayParse = oci_parse($conn, $yesterdaySql);
            oci_bind_by_name($yesterdayParse, ":projName", $_SESSION['cd-dropdown']);            
            oci_define_by_name($yesterdayParse, "TOTALYESTERDAYWEIGHT", $sumWeightYesterday);
            oci_execute($yesterdayParse);

            // TWO DAYS AGO FABRICATION
            $twoDaysSql = "SELECT SUM(CURRENT_WEIGHT) AS TOTALTWODAYSAGOWEIGHT FROM FABRICATION_HIST 
                                WHERE TO_CHAR (FAB_ENTRY_DATE,'MM/DD/YYYY') = TO_CHAR(SYSDATE - 2, 'MM/DD/YYYY') 
                                AND PROJECT_NAME = :projName";
            $twoDaysParse = oci_parse($conn, $twoDaysSql);
            oci_bind_by_name($twoDaysParse, ":projName", $_SESSION['cd-dropdown']);            
            oci_define_by_name($twoDaysParse, "TOTALTWODAYSAGOWEIGHT", $sumWeightTwoDays);
            oci_execute($twoDaysParse);

我知道这是非常低效的。任何人都可以建议我,以便我可以在一个查询中获取两天的查询?

提前致谢

【问题讨论】:

  • 将 PHP 的时间限制作为查询参数传入,然后将 FAB_ENTRY_DATE 与这些参数进行比较。你也只需要一个参数化查询。
  • 如果有性能问题,很可能是在数据库本身。一个查询而不是两个在这里不会有太大影响(在我看来)。您最好要求调整数据库查询本身。为此,我建议您在此处发布查询的执行计划。

标签: php sql oracle


【解决方案1】:

你来了……

SELECT
    SUM(CASE WHEN TRUNC(FAB_ENTRY_DATE) = TRUNC(SYSDATE) - 1 THEN CURRENT_WEIGHT END) AS TOTALYESTERDAYWEIGHT,
    SUM(CASE WHEN TRUNC(FAB_ENTRY_DATE) = TRUNC(SYSDATE) - 2 THEN CURRENT_WEIGHT END) AS TOTALTWODAYSAGOWEIGHT
FROM FABRICATION_HIST 
WHERE FAB_ENTRY_DATE >= TRUNC(SYSDATE) - 2
    AND FAB_ENTRY_DATE < TRUNC(SYSDATE)
    AND PROJECT_NAME = :projName
;

...它甚至可以通过以下方式很好地索引:

create index i_fabrication_hist_something
on t_fabrication_hist (project_name, fab_entry_date)
compress 1
compute statistics
;

【讨论】:

  • 感谢@nop77svk。如果今天或明天是星期一,如何跳过星期日?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多