我正在运行此查询并收到错误:
select mst_machine.MachineName,
FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') as dataTimeStamp,
trn_dacs.TargetWeight as dataValue,
trn_dacs.Weight
FROM trn_dacs
INNER JOIN mst_machine ON trn_dacs.MachineNo = mst_machine.MachineNo
where dataTimeStamp >= '1/31/2018 7:21:16 AM'
错误是:
1054 - 'where子句'
中的未知列dataTimeStamp
我对MySQL的熟悉程度与SQL Server不同。我确定我之前在SQL Server中完成了这个。
如果没有where子句,查询运行正常,列标题会正确显示dataTimeStamp。 (仅供参考)。
另外 - 我知道我可以通过将trn_dacs.DateTime替换为dataTimeStamp来实现这一点,但是,我需要为该时间戳使用别名,这样我总是可以为任何表结构自动生成where子句。
答案 0 :(得分:2)
您不能在where子句中使用别名,请使用:
WHERE FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') >= '1/31/2018 7:21:16 AM'
代替:
where dataTimeStamp >= '1/31/2018 7:21:16 AM'
答案 1 :(得分:0)
正如其他人的评论中所述,您不能使用SELECT
子句中WHERE
子句的列别名。
您可以使用的一种方法是使用HAVING
子句而不是WHERE
子句。这不一定表现良好(因为MySQL不能使用索引来满足过滤),但它满足您的要求,因为我理解它们:
select mst_machine.MachineName,
FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') as dataTimeStamp,
trn_dacs.TargetWeight as dataValue,
trn_dacs.Weight
FROM trn_dacs
INNER JOIN mst_machine ON trn_dacs.MachineNo = mst_machine.MachineNo
HAVING dataTimeStamp >= '2018-01-31 07:21:16'
另一种选择是使用WHERE
子句中的列,并将函数应用于用于过滤的时间戳。这可能会表现得更好,因为MySQL可以使用索引(如果有的话)进行过滤:
select mst_machine.MachineName,
FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') as dataTimeStamp,
trn_dacs.TargetWeight as dataValue,
trn_dacs.Weight
FROM trn_dacs
INNER JOIN mst_machine ON trn_dacs.MachineNo = mst_machine.MachineNo
WHERE trn_dacs.DateTime >= unix_timestamp('2018-01-31 07:21:16')
答案 2 :(得分:-1)
试试这个
SELECT mst_machine.MachineName,
FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') AS dataTimeStamp,
trn_dacs.TargetWeight AS dataValue,
trn_dacs.Weight
FROM trn_dacs
INNER JOIN mst_machine
ON trn_dacs.MachineNo = mst_machine.MachineNo
WHERE FROM_UNIXTIME(trn_dacs.DateTime,'%Y-%m-%d %H:%i:%s') >= '1/31/2018 7:21:16 AM'