我创建了两个相同的表,列出了与数据库中某些产品规则有关的所有例外情况。表1是针对第1周的表,表2针对第2周,例外是每周查看,并且不对数据库进行更正。第二周的数据包括第一周的例外情况,我想从第二周开始排除一周的例外情况。仅查看新例外
答案 0 :(得分: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 |
+---------------------+-------+
答案 1 :(得分:1)
Oracle有一个MINUS运算符,所以你可以做
SELECT col_a, col_b... FROM table_new
MINUS
SELECT col_a, col_b... from table_old
只要列具有相应的数据类型(如果表具有相同的结构,那么将与SELECT *一起使用),这是有效的。
答案 2 :(得分:0)
按年/周数将表拆分为分区也可能有一些优势。
答案 3 :(得分:0)
为了真正帮助您,我们需要更多信息。你在谈论表格或观点(“......例外只是每周查看......”部分让我困惑)?
如果你能提供一个简短的完整例子(是的 - 从Tom Kyte偷来的),我们可以提供一个完整的答案。如果以上情况没有帮助你。