在一个表1中按月计数(Unix时间戳)并将结果写入表2
Posted
技术标签:
【中文标题】在一个表1中按月计数(Unix时间戳)并将结果写入表2【英文标题】:COUNT by month (Unix Timestamp) in one table1 and write the result into table 2 【发布时间】:2012-02-17 15:48:10 【问题描述】:我有 table1 来做这个查询
SELECT DATE_FORMAT(FROM_UNIXTIME(t.TSTAMP), "%Y-%m") AS "timePeriod", COUNT(*) AS "prod1"
用 col'timePeriod' 和 col'prod1' 给我一个完美的 2 列结果。我现在想更新主键为“timePeriod”的 table2.prod1。
我试过了
【问题讨论】:
【参考方案1】:类似这样的东西......不过我无法测试它。
UPDATE table2 AS T2
INNER JOIN
(
SELECT DATE_FORMAT(FROM_UNIXTIME(TSTAMP), "%Y-%m") AS "timePeriod",
COUNT(*) AS prod1 FROM table1
GROUP BY DATE_FORMAT(FROM_UNIXTIME(TSTAMP), "%Y-%m")
) AS T1 USING (timePeriod)
SET T2.prod1 = T1.prod1;
【讨论】:
有了这个我得到codeError : Unknown column 't.TSTAMP' in 'field list'
我的问题措辞不正确,这个解决方案可以完美地作为更新!【参考方案2】:
这将按照您指定的方式进行
INSERT
IGNORE // include this if you want conflicts to be ignored
INTO table2 (
timePeriod,
prod1
)
SELECT
DATE_FORMAT(FROM_UNIXTIME(t.TSTAMP), "%Y-%m"),
COUNT(*)
// you didn't include a "FROM" so added relevant place here
FROM table1
// Include this if you want conflicts to append to the existing row
ON DUPLICATE KEY UPDATE prod1 = prod1 + VALUES(prod1)
// Include this if you want conflicts to replace the existing row
ON DUPLICATE KEY UPDATE prod1 = VALUES(prod1)
【讨论】:
为什么这被否决了?我知道上面会按照要求的方式运行,所以如果我一直在做一些根本上存在缺陷的事情,我会很感激批评 当我使用INSERT INTO table2 ( timePeriod, prod1 ) SELECT DATE_FORMAT(FROM_UNIXTIME(TSTAMP), "%Y-%m") AS "timePeriod", COUNT(*) AS 'prod1' FROM table1 WHERE ACTION='prod1' GROUP BY timePeriod; ON DUPLICATE KEY UPDATE prod1 = VALUES(prod1)
时,数据插入正确,但我仍然收到消息“ON DUPLICATE KEY UPDATE pprod1 = VALUES(prod1) Error : You have an error in your SQL syntax;”
万岁!!我的错,GROUP BY timePeriod 之后的分号是问题所在。非常感谢,这个地方很震撼
很高兴听到 - 如果这里的解决方案已经回答了您的问题,请将其标记为已回答 :)以上是关于在一个表1中按月计数(Unix时间戳)并将结果写入表2的主要内容,如果未能解决你的问题,请参考以下文章