这是 dbfiddle 以便更好地理解,阅读问题时请参考:https ://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b89a233c62983a23f94120eb3779a831
我有 2 个表,称为列表和日志表。列表表包含产品参考号及其当前状态。因此,假设如果它的状态是当前发布并且稍后出售,则状态更新为已售。这里是参考号。在此表中是唯一的,因为 1 个产品的状态可以更改。
现在我有另一个名为 Logs 的表,该表记录了在特定时间范围内特定产品(由 refno 引用)发生的所有状态更改。列表表中的初始条目没有记录在这里,但是一旦它的状态发生变化,该条目就会显示在这里。
假设我有以下列表表('D' => 'Draft', 'A' => 'Action', 'Y' => 'Publish', 'S' => 'Sold', 'N' => '让'):
INSERT INTO listings VALUES
(3, 'Y','2021-05-02','2021-10-02','LP01'), (4, 'A','2021-05-01','2021-05-01','LP02'),
(5, 'S','2020-10-01','2020-10-01','LP03'), (6, 'N','2021-05-01','2021-10-06','LP06'),
(10, 'D','2021-10-06','2021-10-06','LP05'), (11, 'D','2021-01-01','2021-01-01','LP04');
到目前为止,每个状态下的总计数将给出:
状态_1 | C |
---|---|
发布 | 1 |
行动 | 1 |
卖 | 1 |
剩下 | 1 |
草稿 | 2 |
但是,如果我只想要 2020-10-01 的条目计数,它将在所有状态下显示 0,除了已售出,它会显示 1。
现在,在 2020 年 10 月 1 日到今天的这段时间里,如上所示,在列表表中输入了一些值,而且对于某些情况,状态也发生了变化。状态表:
INSERT INTO logs VALUES
(1, 'Let','Action','2021-06-01','LP01'), (2, 'Action','Draft','2021-10-01','LP01'),
(3, 'Draft','Publish','2021-10-02','LP01'), (4, 'Action','Let','2021-10-06','LP06');
现在在我的列表中显示的是状态更改后的值。所以现在要获取特定日期的总计数,我让我的语句引用日志表中的日期并分别减去 status_to,并添加 status_from。对此的查询在上面提供的 dbfiddle 中。在这里,我让它返回发生在 2021 年 10 月 1 日或之前的数据,但它没有给出正确的输出。
此查询的另一个问题是我无法返回最初发生的条目的数据。例如,就像我上面提到的,2020-10-01 上的数据值应该显示 1 在已售出,而 0 在其他所有内容(期望的输出)下,但它不会这样做,因为日志表中没有记录何时最初添加了一个新条目。
所以基本上我在这里想要的是查询检查我的两个表中发生在今天和查询中指定的日期之间的事务,并减少在我在查询中指定的日期之后发生的任何事务。如果您想更简单地解释我想要实现的目标,请参考:
见分贝小提琴