繁体   English   中英

在SQL ACCESS中创建带有日期时间段的时间轴查询

[英]Create a Timeline Query with date periods in SQL ACCESS

我想在SQL Access中编写一个查询(无法选择该软件...),以便从记录表中创建时间轴。 下面是一个简单的示例,以解释我要做什么。

我有一张有2条记录的表。 每个记录由其ID,值,开始日期,结束日期和置信度定义。

Id | vValue |  dtBegin |   dtEnd  | lLevel
-------------------------------------------
1  |    a   |20/06/2016|28/06/2016|   Low
2  |    b   |23/06/2016|25/06/2016|   High

该查询应返回一个时间轴,其中包含每个时间段内可用的最高信息级别(及其值)。 在示例中,查询结果应为:

vValue|  dtBegin |  dtEnd   |lLevel
------------------------------------
  a   |20/06/2016|23/06/2016|  Low
  b   |23/06/2016|25/06/2016|  High
  a   |25/06/2016|28/06/2016|  Low

从2016年6月20日到2016年6月23日,表中可用的最高置信度为“低”,并且相关值为“ a” /

从23/06到25/06,该期间包含两个记录,但是可用的最高置信度为“高”,因此该值为“ b”

非常感谢你的帮助

蒂博

不看数据结构就很难提供帮助。 如果开始/结束日期在您的数据中不重叠,则可能可行:

/* Finds distinct dates which only have a low record */

SELECT
    vValue,dtBegin,dtEnd,'Low' AS lLevel
FROM
(
   SELECT DISTINCT vValue,dtBegin,dtEnd
    FROM tbl
    WHERE lLevel = "Low"
    EXCEPT
    SELECT DISTINCT vValue,dtBegin,dtEnd
    FROM tbl
    WHERE lLevel = "High"
 ) AS X
/* Appends distinct date sets */
UNION   
SELECT DISTINCT vValue,dtBegin,dtEnd,lLevel
FROM tbl
WHERE lLevel = "High"

可能有一种更简单的方法,您可以从基本查询开始以获取所有必需的日期:

SELECT dtBegin
FROM Table1
GROUP BY dtBegin 

UNION 
SELECT dtEnd AS dtBegin 
FROM Table1

通过此查询,您可以获取不重叠的日期范围:

SELECT Timeline.dtBegin, Min(Timeline_1.dtBegin) AS dtEnd 
    FROM Query1 AS Timeline, Query1 AS Timeline_1
    WHERE (((Timeline_1.dtBegin) > Timeline.dtBegin))
    GROUP BY Timeline.dtBegin

通过此操作,您可以交叉联接回到原始表,并使用子查询获取与日期范围重叠的任何表条目的最大级别和vValue:

SELECT Query2.dtBegin, Query2.dtEnd, Table1.lLevel, Table1.vValue 
FROM Query2, Table1
WHERE (((Table1.lLevel) =
    (SELECT MAX(lLevel) 
     FROM Table1 T 
     WHERE T.dtBegin <=Query2.dtBegin AND 
         T.dtEnd >=Query2.dtEnd))) AND
    ((Table1.dtBegin)<=Query2.dtBegin) AND 
    ((Table1.dtEnd)>=Query2.dtEnd)

当然,您必须做一些额外的逻辑才能获得最大级别,具体取决于您的选择的配置方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM