从每小时和30分钟的表中加入数据

时间:2015-09-01 19:39:34

标签: sql sql-server database

我每小时都有一张数据表:

enter image description here

和每30分钟有一个数据的表格:

enter image description here

我想加入这两个表(按日期),将batVolt和TA放在同一个表格中,并在一小时之间的30分钟内重复batVolt的值。

4 个答案:

答案 0 :(得分:2)

SELECT *
FROM HourTable t 
INNER JOIN HalfHourTable ht 
  ON CAST(t.repDate AS Date) = CAST(ht.repDate AS Date) 
 AND DATEPART(HOUR, t.repDate) = DATEPART(HOUR, ht.repDate) 

修改

您的查询应该是

SELECT n.repDate
     , n.TA
     , a.batVolt 
FROM [DAP].[dbo].[ARRMet] AS n 
FULL JOIN [DAP].[dbo].[array3] AS a 
ON DATEPART(HOUR, n.repDate) = DATEPART(HOUR, a.repDate) 
AND CAST(n.repDate AS DATE) = CAST(a.repDate AS DATE)
WHERE CAST(n.repDate AS DATE) = '20150831' 
ORDER BY n.repDate DESC

答案 1 :(得分:1)

我会这样做与M.Ali略有不同。这使用较少的功能,对我来说似乎有点简单。

SELECT *
FROM HourTable t 
INNER JOIN HalfHourTable ht 
  t.repDate = dateadd(hour, datediff(hour, 0, ht.repDate), 0)

答案 2 :(得分:0)

您可以使用DATEPART()

select ta.repDate, ta.code, ta.TA, bat.batVolt
from table2 ta
join table 1 bat
    on (DATEPART(yyyymmddhh,bat.repDate) = DATEPART(yyyymmddhh, ta.repDate)

我不记得datepart的确切语法,但应该与此类似

答案 3 :(得分:0)

您可以尝试以下

SELECT      x.*, y.*
FROM        BatVoltDetails x 
INNER JOIN  TADetails y 
ON LEFT(CONVERT(VARCHAR, x.repDate, 120), 13) = LEFT(CONVERT(VARCHAR, y.repDate, 120), 13)