【发布时间】:2014-12-03 15:10:44
【问题描述】:
假设我有一个表格,它告诉我某个事物何时被激活和停用:
CREATE TABLE [dbo].[active]
(
[timestamp] [DATETIME] NOT NULL,
[activated] [BIT] NOT NULL
)
我最好尝试对此进行查询以检索事物处于活动状态的时间间隔:
SELECT a.timestamp AS 'ActivatedDate',
Deactivated.timestamp
FROM active a
OUTER apply (SELECT Min(d.timestamp) AS TimeStamp
FROM active d
WHERE activated = 0
AND d.timestamp > a.timestamp) AS Deactivated
WHERE a.activated = 1
我需要重写它,以便它可以与 ANSI SQL 一起使用,或者至少可以与 T-SQL 和 Oracle 9 一起使用。据我了解,OUTER apply 不适用于 Oracle 9。
如果有更好的方法来做这种事情,请分享! :)
我需要这个来检查在启用/禁用此功能时是否发生了某些事件。谢谢!
【问题讨论】:
-
OUTER APPLY的 ANSI 等效项是JOIN LATERAL(但 Postgres 和 HSQLDB 是唯一支持的) -
顺便说一句:Oracle 9 早就被弃用了,你不应该使用它。
-
我没有使用它,但我的一些客户正在使用,或者可能会使用。这完全是关于在之前某个日期做出的兼容性承诺。
标签: sql sql-server oracle timestamp ansi-sql