0

我创建了两个相同的表,列出了数据库中某些产品规则的所有例外情况。表一是第一周的表二是第二周的例外情况只是每周查看一次,数据库中没有进行更正。第二周的数据包括第一周的例外情况我想从第二周排除一周的例外情况。仅查看新的异常

4

4 回答 4

1

我建议您在表中添加一个时间戳并在此时间戳上选择/过滤。

这样,您还可以将所有异常放入一个表中并定义两个视图。

我不擅长 PL/SQL,但也许你可以调整我的 MySQL 示例:

CREATE DATABASE timetest;
CONNECT timetest;

CREATE TABLE errorlog (
  stamp TIMESTAMP NOT NULL ,
  error VARCHAR(255) NOT NULL
);

INSERT into errorlog (`stamp`, `error`)
  VALUES (DATE_SUB(CURDATE(),INTERVAL 8 DAY), 'old');
INSERT into errorlog (`stamp`, `error`)
  VALUES (NOW(), 'new');

SELECT * FROM errorlog WHERE stamp>DATE_SUB(CURDATE(),INTERVAL 7 DAY);
SELECT * FROM errorlog WHERE stamp<DATE_SUB(CURDATE(),INTERVAL 7 DAY);
DROP DATABASE timetest;

给我:

mysql> SELECT * FROM errorlog WHERE stamp>DATE_SUB(CURDATE(),INTERVAL 7 DAY);
+---------------------+-------+
| stamp               | error |
+---------------------+-------+
| 2009-01-29 01:44:38 | new   |
+---------------------+-------+

mysql> SELECT * FROM errorlog WHERE stamp<DATE_SUB(CURDATE(),INTERVAL 7 DAY);
+---------------------+-------+
| stamp               | error |
+---------------------+-------+
| 2009-01-21 00:00:00 | old   |
+---------------------+-------+
于 2009-01-29T00:35:35.553 回答
1

Oracle 有一个 MINUS 运算符,所以你可以做

SELECT col_a, col_b... FROM table_new
MINUS
SELECT col_a, col_b... from table_old

只要列具有相应的数据类型,它就可以工作(如果表具有相同的结构,则可以使用 SELECT *)。

于 2009-01-29T00:53:28.280 回答
0

为了真正帮助您,我们需要更多信息。您是在谈论表格还是视图(“......例外只是每周查看......”部分让我感到困惑)?

如果您可以提供一个简短的完整示例(是的 - 从 Tom Kyte 窃取),我们可以提供一个完整的答案。那就是如果以上没有帮助你。

于 2009-01-31T01:20:53.773 回答
0

按年/周数将表分成分区也可能有一些优势。

于 2009-01-29T01:51:48.367 回答