Oracle查询 - 上次日期多个项目

时间:2016-08-15 08:44:38

标签: sql database oracle

我对查询有些麻烦。查询是为了获取Article Nr。和修改日期。之后我们生成一份报告。它一直运作到现在。

每个产品都有4个阶段,有4个日期。 不幸的是在DB中有时超过4个阶段。在某些情况下,产品会将流程传递两次。这意味着8个阶段,8个日期。 我试图得到什么:

  • 包含一些产品的列表
  • 最新阶段(最年轻的日期)
  • 如果退出最早的生产步骤,则忽略

这是我的代码,(我创建伪代码)

我尝试将Artikel编号与日期(concat())混合。 获得一个独特的字符串 但它工作得不好(处理时间很长)。

SELECT
  * 
FROM
  (
    SELECT
      /* Some Calculations & Cases and Critera */
    FROM
      ( 
        SELECT
          /* Get the Product Columns */
          ArtNumber,
          modDate,
          weight 
        FROM  
          /* four different Tables */  
        WHERE  
          /* Criterialist to get the Products */  
          modDate>sysdate -360  
          /* what i think, that can solve the Problem */  
        AND CONCAT(ArtNumber, modDate) IN  
          (  
             SELECT DISTINCT  
               ArtNumber  
             FROM  
             WHERE  
               (  
                 stateentrytime  >sysdate - 13  
              AND stateentrytime<sysdate - 5  
              )  
              (  
                SELECT  
                  MAX(modTime) AS highestDate,  
                  ArtNumber,  
                  CONCAT (ArtNumber, modTime) AS ArtMod  
                FROM  
                WHERE  
                  /* Criterialist to get the Products */  
                AND ArtNumber IN  
                  (  
                    SELECT  
                      ArtNumber  
                    FROM  
                    WHERE  
                      modTime>sysdate -360  
                    GROUP BY  
                      h.ArtNumber  
                  )  
                GROUP BY  
                  h.ArtNumber,  
                  CONCAT (ArtNumber, modTime)  
              )  
          )  
      )  
      ftd ,  
    WHERE  
      /* Criterialist to get the Products */  
  )  
WHERE  
  /* more Criteria */    

你有什么提示吗? 为了

  1. 获取modDate
  2. 优化查询
  3. 我的期望:

    ArtNumber | modTime
    --------- | -------
    12345     | 23.08.2016
    12346     | 20.07.2016
    12347     | 23.05.2016
    12348     | 23.03.2016
    
    • 一个项目的一个日期

    我得到了什么:

    ArtNumber | modTime
    --------- | -------
    12345     | 23.08.2016
    12346     | 20.07.2016
    12345     | 23.05.2016
    12346     | 23.03.2016
    
    • 相同的项目编号
    • 使用不同的日期

    问题是,当我试图获得MAX时。我只得到具有最高日期的物品。

    非常感谢Phil

1 个答案:

答案 0 :(得分:0)

您想要汇总数据。您正在寻找df = data.frame(Year=c(2012,2013,2014), N=c(61175,52477,48699)) plot(df[,c('Year', 'N')], type='o') legend(x=1, y=max(df$N), legend=c('a'), pch=1, lty=1) MAX(modtime)。这转换为artnumber。 (如果没有MAX(modtime) ... GROUP BY artnumber,您只会获得一行聚合所有 recods。)

因此:

GROUP BY