使用单独的日期/时间字段根据其他记录选择记录

时间:2013-03-05 16:34:46

标签: sql

我有一个数据库,可以在不同的字段中存储日期和时间。我需要选择在每个发生的日期和时间的+和 - 90分钟内发生的所有记录。

我能够以我需要的格式获取所有内容

SELECT UFV1.USR_DATE
,UFV1.USR_TIME
,LEFT(CAST(DATEADD(minute, -90, UFV1.USR_TIME) AS TIME),8) AS MIN_TIME
,LEFT(CAST(DATEADD(minute, +90, UFV1.USR_TIME) AS TIME),8)AS MAX_TIME
FROM USR_Y_FACILITY_VISIT UFV1

WHERE UFV1.MASTER_CUSTOMER_ID = '2'

ORDER BY UFV1.USR_DATE, UFV1.USR_TIME

我遇到困难的是我需要构建一个获取此信息的查询(基本上是每行的最小值/最大值),然后根据该信息选择同一表中的所有信息。谢谢你的帮助我完全不知道下一步该去哪里。

2 个答案:

答案 0 :(得分:0)

将表的关键字段添加到给定的查询中,以及相应的GROUP BY子句。然后查询您的数据表joind到该查询作为此格式的sun-query:

SELECT * 
FROM T
JOIN ( SELECT * ... ) U 
     ON U.key = T.key 
    AND T.dateTime BETWEENU.MinDateTime AND U.MaxDateTime

答案 1 :(得分:0)

如果我正确理解了一个问题,那么此请求对您来说是必要的

SELECT *
FROM USR_Y_FACILITY_VISIT UFV1
WHERE EXISTS (
              SELECT 1
              FROM USR_Y_FACILITY_VISIT UFV2
              WHERE UFV2.MASTER_CUSTOMER_ID = '2'
                AND UFV1.USR_DATE = UFV2.USR_DATE
                AND UFV1.USR_TIME BETWEEN CAST(DATEADD(minute, -90, UFV2.USR_TIME) AS time) 
                                    AND CAST(DATEADD(minute, 90, UFV2.USR_TIME) AS time) 
              )