Mysql 从同一组数据组合两个基于时间的查询

Mysql 从同一组数据组合两个基于时间的查询,mysql,timezone,Mysql,Timezone,我有一个数据库,它包含两个时区内多个站点的事件,所有这些事件都报告本地时间。我需要获取过去12小时的数据,并将其放入CSV。我输入了一个union,虽然它输出数据时没有ORDER BY,但当我使用INTO OUTFILE部分运行它时,会得到一个别名错误。我错过了什么 (SELECT comp.locationid, comp.name, event.status, event.starttime, event.endtime FROM comp,e

我有一个数据库,它包含两个时区内多个站点的事件,所有这些事件都报告本地时间。我需要获取过去12小时的数据,并将其放入CSV。我输入了一个union,虽然它输出数据时没有ORDER BY,但当我使用INTO OUTFILE部分运行它时,会得到一个别名错误。我错过了什么

(SELECT
    comp.locationid,
    comp.name,
    event.status,
    event.starttime,
    event.endtime
FROM
    comp,event
WHERE
    event.endtime >= DATE_SUB(NOW(), INTERVAL 12 HOUR)
    AND event.endtime < NOW()
    AND event.compid = comp.id
    AND comp.timezone = "EST")


UNION


(SELECT
    comp.locationid,
    comp.name,
    event.status,
    event.starttime,
    event.endtime
FROM
    comp,event
WHERE
    event.endtime >= DATE_SUB(NOW(), INTERVAL 15 HOUR)
    AND event.endtime < DATE_SUB(NOW(), INTERVAL 3 HOUR)
    AND event.compid = comp.id
    AND comp.timezone = "PST")


ORDER BY comp.locationid
INTO OUTFILE
    "report.csv"
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
;

为表提供别名会有所帮助

(SELECT
    comp.locationid,
    comp.name,
    event.status,
    event.starttime,
    event.endtime
FROM
    comp,event
WHERE
    event.endtime >= DATE_SUB(NOW(), INTERVAL 12 HOUR)
    AND event.endtime < NOW()
    AND event.compid = comp.id
    AND comp.timezone = "EST") AS T


UNION ALL


(SELECT
    comp.locationid,
    comp.name,
    event.status,
    event.starttime,
    event.endtime
FROM
    comp,event
WHERE
    event.endtime >= DATE_SUB(NOW(), INTERVAL 15 HOUR)
    AND event.endtime < DATE_SUB(NOW(), INTERVAL 3 HOUR)
    AND event.compid = comp.id
    AND comp.timezone = "PST") AS T2
ORDER BY comp.locationid
INTO OUTFILE
    "report.csv"
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
;
更新:

不能在UNION中的ORDER BY子句中引用特定的表名。尽管如此,这只是一种改变

ORDER BY comp.locationid
         ^^^^^
简单地

ORDER BY locationid
除此之外,似乎你最有可能打算使用UNION ALL而不是UNION。所以也要改变这一点,因为UNION需要额外的处理步骤来消除重复项


删除并集中两个选择的括号

将所有双引号更改为单引号


为每个表指定别名。这是我第一次使用SQL,文档很混乱。如何给表加上别名?UNION ALL和引用中的更改起到了作用,但现在我在INTO OUTFILE中遇到了一个一般性错误。请尝试将所有双引号更改为单引号,并在第2行发布确切的错误消息,您将获得错误1064 42000:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解可在“INTO-OUTFILE”report.csv“字段以”“LINES TERMINA”结尾(第35行)附近使用的正确语法删除两个选项周围的括号。它们造成了你的问题,你根本不需要它们