繁体   English   中英

使用两个日期之间的SQL差异

[英]SQL Difference between using two dates

我的数据库有一个名为“ clientordermas”的表。 该表的两列如下。

execid和fillqty。
这两个字段的三个记录如下。

E02011 / 03 / 12-05:57_24384:1000
E02011 / 03 / 12-05:57_24384:800
E02011 / 03 / 09-05:57_24384:600

我需要做的是获取最新日期和最新日期之前的1之间的填充差bt,即400(1000-400)。
我从execid中提取了日期,如下所示:

(SUBSTR(execid,3,10)

我尽力了,但是我无法编写SQL查询来获取400。有人可以帮我做这个吗???

附言:我需要从同一日期选择最大填充量。 那不是1000,而是800。

您可以使用窗口函数来访问“附近”的行,因此,如果您首先清理子查询中的数据,然后使用窗口函数来访问下一行,则应该获得正确的结果。 但是除非您在substr(execid, 3, 10)上有索引,否则这将很慢。

WITH datevalues AS
(
  SELECT max(filledqty) maxfilledqty, substr(execid, 3, 10) execiddate
  FROM clientordermas
  GROUP BY substr(execid, 3, 10)
)
SELECT
  execiddate,
  maxfilledqty -
  last_value(maxfilledqty) over(ORDER BY execiddate DESC ROWS BETWEEN 0 PRECEDING AND 1 FOLLOWING)
FROM datevalues
ORDER BY execiddate DESC;
WITH maxqtys AS (
SELECT substr(a.execid,3,10) AS date, MAX(a.filledqty) AS maxqty
FROM clientordermas a
GROUP BY substr(a.execid,3,10)
)
SELECT a.maxqty-b.maxqty
FROM maxqtys a, maxqtys b
WHERE a.date <> b.date AND ROWNUM=1
ORDER BY a.date DESC, b.date DESC

这首先创建一个子查询(maxqty),其中包含每个唯一日期的最大filldqty,然后将此子查询交叉连接到自身,但不包括相同的行。 这将导致一个包含日期对(不含相同日期)的表。

按降序对这些对进行排序,最上面一行直到包含最后一个和倒数第二个日期,并具有适当的数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM