在一个表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的主要内容,如果未能解决你的问题,请参考以下文章

mysql计算行并按月分组[重复]

在数据表中按月对数据库表中的数据进行分组

即使缺少月份,也会按月计算总计

LINQ:在日期时间字段中按月和年分组

SQL语言中按月查询

在R中按月对行求和