2015-12-15 84 views
1
SELECT Table1.NUMBER_ID, 
     Table1.ACCOUNT, 
     Table1.NAME_CODE, 
     Table1.TIME, 
     Table1.DATE, 
     Table2.UNIT_LABEL, 
     Table1.TIME - NVL(LAG (Table1.TIME) OVER (ORDER BY Table1.TIME), Table1.TIME) diff 
FROM Table2 
     INNER JOIN Table1 
     ON Table2.NAME = Table1.NAME_CODE 
WHERE DATE >= trunc(sysdate - 1) 
AND UNIT_LABEL = 'KG' 
ORDER BY 
     Table1.NAME_CODE, 
     Table1.TIME 

嗨, 我上面的SQL代码,可以让我与单位标签“KG”的项目在购买时间的差异之前ORDER BY。我正在寻找每个NAME_CODE中的购买时间之间的差异,所以我想在执行计算之前按NAME_CODE进行排序以获得购买时间的滞后差异。SQL - 如何进行计算

我的PL/SQL代码正在从Oracle获取信息。此时此代码正在执行滞后时间差计算,然后对不是我想要的数据进行排序。我需要它首先按照NAME_CODE对数据进行排序,然后得到购买时间的滞后,这样我就可以按照NAME_CODE使用它,而不是使用UNIT_LABEL为“KG”的所有东西。

任何帮助都非常感谢。谢谢。

+0

请添加一些样本数据,并基于该数据预期的输出。 **编辑**你的问题,并将其添加为格式文本。另外:在您的问题中没有PL/SQL –

回答

1

使用PARTITION BY子句中的LAGanalytic function

SELECT Table1.NUMBER_ID, 
     Table1.ACCOUNT, 
     Table1.NAME_CODE, 
     Table1.TIME, 
     Table1.DATE, 
     Table2.UNIT_LABEL, 
     Table1.TIME - NVL(LAG (Table1.TIME) OVER (PARTITION BY Table1.NAME_CODE ORDER BY Table1.TIME), Table1.TIME) diff 
FROM Table2 
     INNER JOIN Table1 
     ON Table2.NAME = Table1.NAME_CODE 
WHERE DATE >= trunc(sysdate - 1) 
AND UNIT_LABEL = 'KG' 
ORDER BY 
     Table1.NAME_CODE, 
     Table1.TIME 
+0

如果答案解决了您的问题,那么您可以将该答案标记为接受以表明问题已关闭。 – MT0

+0

现在完成,对不起,我是新手。再次感谢您的帮助 – JC59