And*_*yde 8 mysql datetime multiple-tables
我必须相对于两个表之间的相同时间来扼杀结果,但是时间戳因为它们的记录方式而有所不同.我想获得类似于示例1的结果,但我只获得带星号的值,如示例2所示.从比较中删除secods或选择与最接近的DATETIME值对应的值的最佳方法是什么?
目前我正在使用此查询:
SELECT Table1.TimeSTamp1, Table1.Param1, Table2.TimeStamp2, Table2.Param2
FROM Table1, Table2
WHERE ... conditions for the other parameters of Table1 and Table2...
AND Table1.TimeSTamp1 = Table2.TimeStamp2
Run Code Online (Sandbox Code Playgroud)
我们热烈欢迎任何有关最佳做法的建议.
例1
TimeStamp1 ¦ Param1 ¦ TimeStamp2 ¦ Param2
2011-01-01 00:00:35 ¦ 1 ¦ 2011-01-01 00:00:35 ¦ a *
2011-01-01 00:01:35 ¦ 2 ¦ 2011-01-01 00:01:35 ¦ b
2011-01-01 00:02:37 ¦ 3 ¦ 2011-01-01 00:02:35 ¦ c
2011-01-01 00:03:31 ¦ 4 ¦ 2011-01-01 00:03:35 ¦ d
2011-01-01 00:04:32 ¦ 5 ¦ 2011-01-01 00:04:35 ¦ e
2011-01-01 00:05:38 ¦ 6 ¦ 2011-01-01 00:05:35 ¦ f
2011-01-01 00:06:36 ¦ 7 ¦ 2011-01-01 00:06:36 ¦ g *
2011-01-01 00:07:32 ¦ 8 ¦ 2011-01-01 00:07:35 ¦ h
2011-01-01 00:08:33 ¦ 9 ¦ 2011-01-01 00:08:35 ¦ i
2011-01-01 00:09:33 ¦ 10 ¦ 2011-01-01 00:09:33 ¦ l *
2011-01-01 00:10:35 ¦ 11 ¦ 2011-01-01 00:10:35 ¦ m *
2011-01-01 00:11:29 ¦ 12 ¦ 2011-01-01 00:11:31 ¦ n
Run Code Online (Sandbox Code Playgroud)
lll 例2
TimeStamp1 ¦ Param1 ¦ TimeStamp2 ¦ Param2
2011-01-01 00:00:35 ¦ 1 ¦ 2011-01-01 00:00:35 ¦ a
2011-01-01 00:06:36 ¦ 7 ¦ 2011-01-01 00:06:36 ¦ g
2011-01-01 00:09:33 ¦ 10 ¦ 2011-01-01 00:09:33 ¦ l
2011-01-01 00:10:35 ¦ 11 ¦ 2011-01-01 00:10:35 ¦ m
Run Code Online (Sandbox Code Playgroud)
O. *_*nes 12
此MySql表达式将返回DATETIME值,并将秒清零.
CONVERT(DATE_FORMAT(table.column,'%Y-%m-%d-%H:%i:00'),DATETIME)
Run Code Online (Sandbox Code Playgroud)
看看这个. http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format.所以你可能会得到这样的查询:
SELECT Table1.TimeSTamp1, Table1.Param1, Table2.TimeStamp2, Table2.Param2
FROM Table1
JOIN Table2 ON CONVERT(DATE_FORMAT(Table1.TimeStamp1,'%Y-%m-%d-%H:%i:00'),DATETIME)
= CONVERT(DATE_FORMAT(Table2.TimeStamp2,'%Y-%m-%d-%H:%i:00'),DATETIME)
WHERE ... conditions for the other parameters of Table1 and Table2...
Run Code Online (Sandbox Code Playgroud)
不过要小心.自动生成的时间戳有点像浮点数; 当他们中的两个相等于彼此时,这只是运气.将时间戳截断为分钟可能没问题,但您可能最好还是从另一个时间戳中减去一个时间戳,并比较差异(或差异的绝对值).
此外,此连接将变慢,因为它必须对每个值运行第二个截断函数,因此它不能使用任何索引.
您可以从另一个时间戳中减去一个时间戳TIMESTAMPDIFF().不过要小心.此功能仅在几秒内彼此几天内的时间戳正确运行; 它毫无顾忌地溢出(正如我发现的那样痛苦).
您可以尝试在插入时将时间戳截断为分钟.那会让你索引它们.
| 归档时间: |
|
| 查看次数: |
7831 次 |
| 最近记录: |