sql - 连接具有相同日期列的日期范围

标签 sql sql-server sql-server-2008

美好的一天。我的数据库中有两个表。我想加入他们,但我似乎检索的行数超出了需要的行数。除了日期范围之外,这两个表都没有任何关系。

如果表b的日期在表a的日期之内;然后加入。然而,我似乎加入了很多超出需要的人。

如何附加表 B 中距离表 A 最近的日期范围的用户名?非常感谢任何帮助。

表A

dateS   auditmessage
2018-04-09 07:06:48.290 Phase 2) (Heat Up) Parameter 3) changed from 8.0 to 5.0
2018-04-09 07:06:48.290 Phase 2) (Heat Up) Parameter 24) changed from 15.0 to 14.5
2018-04-09 07:06:48.290 Phase 3) (Sterilization) Parameter 24) changed from 15.0 to 14.5
2018-04-09 07:06:48.290 Phase 4) (Air Pressurization) Parameter 11) changed from 15.0 to 14.5
2018-04-09 07:06:51.380 Phase 2) (Heat Up) Parameter 3) changed from 8.0 to 5.0
2018-04-09 07:06:51.380 Phase 2) (Heat Up) Parameter 24) changed from 15.0 to 14.5
2018-04-09 07:06:51.380 Phase 3) (Sterilization) Parameter 24) changed from 15.0 to 14.5
2018-04-09 07:06:51.380 Phase 4) (Air Pressurization) Parameter 11) changed from 15.0 to 14.5
2018-04-09 07:08:31.737 Phase 1) (Setup) Parameter 18) changed from 6.0 to 7.0
2018-04-09 07:08:31.737 Phase 4) (Air Pressurization) Parameter 20) changed from 0 to 1
2018-04-09 07:08:34.977 Phase 1) (Setup) Parameter 18) changed from 6.0 to 7.0
2018-04-09 07:08:34.977 Phase 4) (Air Pressurization) Parameter 20) changed from 0 to 1
2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 1) changed from 0 to 2
2018-04-09 09:25:15.967 Phase 4) (Air Pressurization) Parameter 11) changed from 14.5 to 17.5
2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 18) changed from 6.0 to 5.0
2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 3) changed from 2 to 0
2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 18) changed from 7.0 to 6.0
2018-04-09 09:25:15.967 Phase 2) (Heat Up) Parameter 24) changed from 14.5 to 17.5
2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 1) changed from 0 to 2
2018-04-09 09:25:19.247 Phase 4) (Air Pressurization) Parameter 11) changed from 14.5 to 17.5
2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 18) changed from 6.0 to 5.0
2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 3) changed from 2 to 0
2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 18) changed from 7.0 to 6.0
2018-04-09 09:25:19.247 Phase 2) (Heat Up) Parameter 24) changed from 14.5 to 17.5
2018-04-09 12:32:30.123 Phase 1) (Setup) Parameter 3) changed from 0 to 2
2018-04-09 12:32:32.253 Phase 1) (Setup) Parameter 3) changed from 0 to 2

表B

userName       DateS
sam     2018-04-09 07:11:45.907
andy    2018-04-09 09:16:41.023
carl    2018-04-09 12:17:45.057

我的失败查询

SELECT                   

           k.dates,
           k.auditmessage,
           l.username  
FROM       tableA k 
INNER JOIN tableB l 
           --  on l.dateS >=k.dateS --and l.dateS <= k.dateS 
           --where l.dateS >=k.dateS and l.dateS<=k.dateS

期望的结果

dateS   auditmessage   User
    2018-04-09 07:06:48.290 Phase 2) (Heat Up) Parameter 3) changed from 8.0 to 5.0 sam
    2018-04-09 07:06:48.290 Phase 2) (Heat Up) Parameter 24) changed from 15.0 to 14.5  sam
    2018-04-09 07:06:48.290 Phase 3) (Sterilization) Parameter 24) changed from 15.0 to 14.5    sam
    2018-04-09 07:06:48.290 Phase 4) (Air Pressurization) Parameter 11) changed from 15.0 to 14.5   sam
    2018-04-09 07:06:51.380 Phase 2) (Heat Up) Parameter 3) changed from 8.0 to 5.0 sam
    2018-04-09 07:06:51.380 Phase 2) (Heat Up) Parameter 24) changed from 15.0 to 14.5  sam
    2018-04-09 07:06:51.380 Phase 3) (Sterilization) Parameter 24) changed from 15.0 to 14.5    sam
    2018-04-09 07:06:51.380 Phase 4) (Air Pressurization) Parameter 11) changed from 15.0 to 14.5   sam
    2018-04-09 07:08:31.737 Phase 1) (Setup) Parameter 18) changed from 6.0 to 7.0  sam
    2018-04-09 07:08:31.737 Phase 4) (Air Pressurization) Parameter 20) changed from 0 to 1 sam
    2018-04-09 07:08:34.977 Phase 1) (Setup) Parameter 18) changed from 6.0 to 7.0  sam
    2018-04-09 07:08:34.977 Phase 4) (Air Pressurization) Parameter 20) changed from 0 to 1 sam
    2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 1) changed from 0 to 2   andy
    2018-04-09 09:25:15.967 Phase 4) (Air Pressurization) Parameter 11) changed from 14.5 to 17.5   andy
    2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 18) changed from 6.0 to 5.0  andy
    2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 3) changed from 2 to 0   andy
    2018-04-09 09:25:15.967 Phase 1) (Setup) Parameter 18) changed from 7.0 to 6.0  andy
    2018-04-09 09:25:15.967 Phase 2) (Heat Up) Parameter 24) changed from 14.5 to 17.5  andy
    2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 1) changed from 0 to 2   andy
    2018-04-09 09:25:19.247 Phase 4) (Air Pressurization) Parameter 11) changed from 14.5 to 17.5   andy
    2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 18) changed from 6.0 to 5.0  andy
    2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 3) changed from 2 to 0   andy
    2018-04-09 09:25:19.247 Phase 1) (Setup) Parameter 18) changed from 7.0 to 6.0  andy
    2018-04-09 09:25:19.247 Phase 2) (Heat Up) Parameter 24) changed from 14.5 to 17.5  andy
    2018-04-09 12:32:30.123 Phase 1) (Setup) Parameter 3) changed from 0 to 2   carl
    2018-04-09 12:32:32.253 Phase 1) (Setup) Parameter 3) changed from 0 to 2   carl

最佳答案

您可以使用 outer apply 搜索最近的行。对于 TableB 中的每一行,它根据距离对 TableA 行进行排序,然后选择第一行:

select  *
from    TableB b
outer apply
        (
        select  top 1 *
        from    TableA a
        order by
                abs(b.dateS - a.dateS)
        ) a

关于sql - 连接具有相同日期列的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50068305/

相关文章:

php - 将 DateTime 类转换为字符串

sql - 记录 ODBC、SQL Server

php - MySQL 按字段顺序排序

sql - 如何在 T-SQL 中将 int 转换为零填充字符串?

mysql - sql在两个日期之间随机更新

mysql - 选择DML还是DDL?

c# - 是否可以暗示 EntityFramework Core 使用内部连接而不是 EXISTS 子查询来获取导航属性集合条件?

sql - Identity_insert 在临时表中

sql - 缓慢变化的维度 - 什么是 Pure type 6 实现

sql-server-2008 - 是否有可用的 SQL Server 2008 数据库变更管理(迁移)工具?