mysql – 在DISTINCT中使用JOIN并优先考虑一个表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 在DISTINCT中使用JOIN并优先考虑一个表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1775字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 在DISTINCT中使用JOIN并优先考虑一个表](/upload/InfoBanner/zyjiaocheng/893/b34f1b1631a04742b34fda507b984a85.jpg)
我试图结合2个表的数据.
这两个表都包含来自同一传感器的数据(比方说,传感器测量二氧化碳,每10分钟输入一次).
第一个表包含经过验证的数据.我们称之为station1_validated.第二个表包含原始数据.我们称之为station1_nrt.
原始数据表包含实时数据,而经过验证的表仅包含至少1个月的数据点. (它需要一些时间来验证这些数据并在之后手动控制它,这种情况每个月只发生一次).
我现在要做的是将这两个表的数据结合起来在网站上显示实时数据.但是,当验证数据可用时,它应该优先考虑原始数据点上的数据点.
相关的列是:
> timed [bigint(20)]:包含日期时间作为unix时间戳,以毫秒为单位,从1.1.1970开始
> CO2 [double]:包含测量的CO2浓度(ppm)(百万分率)
我写了这个基本的SQL:
SELECT
*
FROM
(SELECT
timed, CO2, '2' tab
FROM
station1_nrt
WHERE
TIMED >= 1386932400000
AND TIMED <= 1386939600000
AND TIMED NOT IN (SELECT
timed
FROM
station1_nrt
WHERE
CO2 IS NOT NULL
AND TIMED >= 1386932400000
AND TIMED <= 1386939600000) UNION SELECT
timed, CO2, '1' tab
FROM
station1_validated
WHERE
CO2 IS NOT NULL
AND TIMED >= 1386932400000
AND TIMED <= 1386939600000) a
ORDER BY timed
这不能正常工作,因为它只选择两个表都有条目的数据点.
但是我现在想用JOIN这样做,因为它会更快.但是,我不知道如何使用DISTINCT(或类似的东西)来加入表以确定优先级.有人可以帮我解决这个问题(或解释一下吗?)
解决方法:
你没有提到在station1_validated中是否存在station1_nrt中不存在的记录,所以我使用了FULL JOIN.如果station1_validated中的所有行都存在于station1_nrt中,则可以使用LEFT JOIN.
像这样的东西
SELECT IFNULL(n.timed,v.timed) as timed,
CASE WHEN v.timed IS NOT NULL THEN v.CO2 ELSE n.CO2 END as CO2,
CASE WHEN v.timed IS NOT NULL THEN '1' ELSE '2' END as tab
FROM station1_nrt as n
FULL JOIN station1_validated as v ON n.timed=v.timed AND v.CO2 IS NOT NULL
WHERE
( n.TIMED between 1386932400000 AND 1386939600000
or
v.TIMED between 1386932400000 AND 1386939600000
)
AND
(n.CO2 IS NOT NULL OR v.CO2 IS NOT NULL)
内容总结
以上是互联网集市为您收集整理的mysql – 在DISTINCT中使用JOIN并优先考虑一个表全部内容,希望文章能够帮你解决mysql – 在DISTINCT中使用JOIN并优先考虑一个表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。