Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql -及时查询。请参阅。是的,我有主键。最后是有趣的链接。但您的描述没有处理我的第二个(更全面)变体的重叠有效范围和未来有效范围。另外,BETWEEN不能处理无限开始/结束时间的空值,因此我有两个条件。我更新了我的答案,因为我需要写更多的内容来适应这个注释。好_Sql_Database_Database Design_Version - Fatal编程技术网

Sql -及时查询。请参阅。是的,我有主键。最后是有趣的链接。但您的描述没有处理我的第二个(更全面)变体的重叠有效范围和未来有效范围。另外,BETWEEN不能处理无限开始/结束时间的空值,因此我有两个条件。我更新了我的答案,因为我需要写更多的内容来适应这个注释。好

Sql -及时查询。请参阅。是的,我有主键。最后是有趣的链接。但您的描述没有处理我的第二个(更全面)变体的重叠有效范围和未来有效范围。另外,BETWEEN不能处理无限开始/结束时间的空值,因此我有两个条件。我更新了我的答案,因为我需要写更多的内容来适应这个注释。好,sql,database,database-design,version,Sql,Database,Database Design,Version,-及时查询。请参阅。是的,我有主键。最后是有趣的链接。但您的描述没有处理我的第二个(更全面)变体的重叠有效范围和未来有效范围。另外,BETWEEN不能处理无限开始/结束时间的空值,因此我有两个条件。我更新了我的答案,因为我需要写更多的内容来适应这个注释。好吧,这是一个与我不同的有效性范围定义。我不区分数据记录和内容。以一组规则为例。直到4月,一套特定的规则仍然有效。之后,应适用不同的规则。也许只有在11月份,才会使用临时规则集。这是规则集的3个版本。另外,我对在查询中使用视图有点犹豫。就表现而言


-及时查询。请参阅。是的,我有主键。最后是有趣的链接。但您的描述没有处理我的第二个(更全面)变体的重叠有效范围和未来有效范围。另外,BETWEEN不能处理无限开始/结束时间的空值,因此我有两个条件。我更新了我的答案,因为我需要写更多的内容来适应这个注释。好吧,这是一个与我不同的有效性范围定义。我不区分数据记录和内容。以一组规则为例。直到4月,一套特定的规则仍然有效。之后,应适用不同的规则。也许只有在11月份,才会使用临时规则集。这是规则集的3个版本。另外,我对在查询中使用视图有点犹豫。就表现而言,我在这方面有过不好的经历。Oracle不能使用来自视图源的键,这会使事情变得比需要的慢。(但我不是专门针对Oracle的。)Oracle优化整个语句的执行。因此,如果您有查看
A_视图
as
从Y>2000的_选项卡中选择X,Y,然后调用此视图,就像
从Y2000和Y所在的_视图中选择X一样
VersionTime datetime -- Time when this versions becomes effective
IsCurrent bool -- Indicates whether this version is the most current (and not deleted)
ValidFrom datetime -- Time when this version becomes valid (inclusive)
ValidTo datetime -- Time when this version becomes invalid (exclusive)
SELECT a, b, c
FROM t1
SELECT a, b, c
FROM t1
WHERE t1.ValidFrom <= :time AND t1.ValidTo > :time
ORDER BY t1.ValidFrom
LIMIT 1
SELECT a, b, c
FROM t1
    LEFT JOIN t2 ON (t2.a = t1.a)
SELECT a, b, c
FROM t1
    LEFT JOIN t2 ON (t2.a = t1.a)
WHERE t1.ValidFrom <= :time AND t1.ValidTo > :time
    AND t2.ValidFrom <= :time AND t2.ValidTo > :time
CREATE TRIGGER TRIGGER_ON_VERSIONED_TABLE
BEFORE UPDATE
  ON VERSIONED_TABLE
BEGIN 
  INSERT INTO VERSIONED_TABLE_HISTORY_PART VALUES (:OLD.COLUMN_A, USER, TIMESTAMP);
END
CREATE TABLE DOC(
    DOC_NAME    VARCHAR(10)
  , DOC_NOTE    VARCHAR(10)
  , VALID_FROM  TIMESTAMP
  , VALID_TO    TIMESTAMP
  , CONSTRAINT DOC_PK PRIMARY KEY(DOCUMENT_NAME, VALID_FROM)
);

INSERT INTO doc VALUES ('A', 'FIRST VER', systimestamp, date'2999-12-31');
INSERT INTO doc VALUES ('B', 'FIRST VER', systimestamp, date'2999-12-31');
WHERE VALID_FROM <= :time AND VALID_TO > :time
ORDER BY VALID_FROM LIMIT 1
SELECT * FROM DOC 
WHERE SYSTIMESTAMP BETWEEN VALID_FROM AND VALID_TO;
UPDATE doc SET VALID_TO = systimestamp 
WHERE DOC_NAME='A' AND SYSTIMESTAMP BETWEEN VALID_FROM AND VALID_TO;
INSERT INTO doc VALUES ('A', 'SECOND VER', systimestamp, date'2999-12-31');
SELECT * FROM DOC WHERE :CUSTOM_DATE BETWEEN VALID_FROM AND VALID_TO;
CREATE VIEW DOC_ACTIVE 
AS SELECT * FROM DOC WHERE SYSTIMESTAMP BETWEEN VALID_FROM AND VALID_TO;
CREATE VIEW DOC_INACTIVE 
AS SELECT * FROM DOC WHERE NOT SYSTIMESTAMP BETWEEN VALID_FROM AND VALID_TO;
SELECT a, b, c FROM t1
SELECT a, b, c FROM t1_VIEW
Document A, version 1 (2010-2020), record valid 2014-9999: VALID   (NEW)
Document A, version 2 (2021-2050), record valid 2014-9999: VALID   (NEW)
Document A, version 1 (2010-2020), record valid 2014-2015: INVALID   (UPDATED)
Document A, version 2 (2021-2050), record valid 2014-2015: INVALID   (UPDATED)
Document A, version 1 (2010-2020), record valid 2016-9999: VALID NOW (NEW)
Document A, version 2 (2021-2050), record valid 2016-9999: VALID NOW (NEW)
Document A, version 1 (2010-2020), record valid 2014-2015: INVALID   (NO CHANGE)
Document A, version 2 (2021-2050), record valid 2014-2015: INVALID   (NO CHANGE)
Document A, version 1 (2010-2020), record valid 2016-9999: VALID NOW (NO CHANGE)
Document A, version 2 (2021-2050), record valid 2016-2018: INVALID   (UPDATED)
Document A, version 2 (2031-2050), record valid 2018-9999: VALID NOW (NEW)
Document A, version 3 (2021-2030), record valid 2018-9999: VALID NOW (NEW)
CREATE VIEW DOC_ACTIVE AS
SELECT * FROM DOC 
 WHERE SYSTIMESTAMP BETWEEN NVL(VALID_FROM, SYSTIMESTAMP) 
                        AND NVL(VALID_TO, SYSTIMESTAMP);
select  *
from    t1
where   VersionId = (select top 1 VersionId
                     from   t1 as MostRecentlyValid
                     where  MostRecentlyValid.ValidFrom <= @AsOfDate
                            and (MostRecentlyValid.ValidTo >= @AsOfDate
                                 or MostRecentlyValid.ValidTo is null)
                            and t1.Id = MostRecentlyValid.Id
                     order by MostRecentlyValid.ValidFrom desc)
select  *
from    (select *
         from  t1
         where VersionId = (select  top 1 VersionId
                from  t1 as MostRecentlyValid
                where MostRecentlyValid.ValidFrom <= '2014/2/11'
                      and (MostRecentlyValid.ValidTo >= '2014/2/1'
                           or MostRecentlyValid.ValidTo is null)
                      and t1.Id = MostRecentlyValid.Id
                      order by MostRecentlyValid.ValidFrom desc ) ) as SelectedRecords
         inner join t2
            on SelectedRecords.Id = t2.Id