gpt4 book ai didi

SQL根据日期时间从多个表中选择

转载 作者:行者123 更新时间:2023-12-03 00:57:36 24 4
gpt4 key购买 nike

我正在编写一个脚本来分析 SQL Server 2008 数据库上数千个表中包含的一些数据。

为了简单起见,这些表可以分为 4-8 个半相关表的组。我所说的半相关是指它们是同一项目的数据集合,但它们没有任何实际的 SQL 关系。每个表由日期时间戳(datetime2 数据类型)、值(可以是intfloat 组成 取决于特定项目),以及当前不感兴趣的一些其他列。日期时间戳在几秒钟内每 15 分钟(每刻钟)设置一次;然而,并非所有数据都是同时精确记录的...

例如:

表1:

TIMESTAMP                 VALUE
2014-11-27 07:15:00.390 1
2014-11-27 07:30:00.390 0
2014-11-27 07:45:00.373 0
2014-11-27 08:00:00.327 0

表2:

TIMESTAMP                 VALUE
2014-11-19 08:00:07.880 0
2014-11-19 08:15:06.867 0.0979999974370003
2014-11-19 08:30:08.593 0.0979999974370003
2014-11-19 08:45:07.397 0.0979999974370003

表3

TIMESTAMP                 VALUE
2014-11-27 07:15:00.390 0
2014-11-27 07:30:00.390 0
2014-11-27 07:45:00.373 1
2014-11-27 08:00:00.327 1

如您所见,并非所有表都以相同的季度 TIMESTAMP 开始。基本上,我所追求的是一个查询,该查询将从 3 个表中最早的 TIMESTAMP 开始,每隔 15 分钟间隔返回 3 个表中每个表的 VALUE。对于给出的示例,我想从 2014-11-27 07:15 开始(不关心秒......因此,需要允许时间戳为 +- 1 分钟左右)。当特定 TIMESTAMP 没有记录时,返回 NULL 值是可以的。因此,对我列出的示例的查询将返回类似以下内容的内容:

TIMESTAMP                 VALUE1   VALUE2             VALUE3
2014-11-27 07:15 1 NULL 0
2014-11-27 07:30 0 NULL 0
2014-11-27 07:45 0 NULL 1
2014-11-27 08:00 0 NULL 1
...
2014-11-19 08:00 0 0 1
2014-11-19 08:15 0 0.0979999974370003 0
2014-11-19 08:30 0 0.0979999974370003 0
2014-11-19 08:45 0 0.0979999974370003 0

我希望这是有道理的。任何帮助/指示/指导将不胜感激。

最佳答案

使用完全外连接

SELECT COALESCE(a.[TIMESTAMP], b.[TIMESTAMP], c.[TIMESTAMP]) [TIMESTAMP],
Isnull(Max(a.VALUE), 0) VALUE1,
Max(b.VALUE) VALUE2,
Isnull(Max(c.VALUE), 0) VALUE3
FROM TABLE1 a
FULL OUTER JOIN TABLE2 b
ON CONVERT(SMALLDATETIME, a.[TIMESTAMP]) = CONVERT(SMALLDATETIME, b.[TIMESTAMP])
FULL OUTER JOIN TABLE3 c
ON CONVERT(SMALLDATETIME, a.[TIMESTAMP]) = CONVERT(SMALLDATETIME, c.[TIMESTAMP])
GROUP BY COALESCE(a.[TIMESTAMP], b.[TIMESTAMP], c.[TIMESTAMP])
ORDER BY [TIMESTAMP] DESC

关于SQL根据日期时间从多个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com