我在 mysql 中有两个表记录特定事件发生的日期。
- 表 1:(id、session_id、日期)
- 表 2:(id、session_date)
Table1 是主表,我只在其中写入 session_id(在这种情况下,日期是从 Table2 的匹配记录中获取的)或日期。我未填写的字段保持为 NULL。
现在,我想计算该事件每月/每年发生的次数,并且如果可能的话,仅在特定日期(例如 2013 年 1 月 1 日)之后执行该过程。
这是我到目前为止所做的,我创建了另一个日期字段(称为 date_final),它保存每行的非 NULL 值,因此我尝试根据该字段对数据进行分组。
SELECT table1.date AS date1,
table2.session_date AS date2,
@date_final := CONCAT_WS('', table1.date, table2.session_date) AS date_final,
MONTHNAME(@date_final) AS `month`,
YEAR(@date_final) AS `year`
FROM table1
LEFT JOIN table2 ON table2.id = table1.session_id
GROUP BY YEAR(@date_final), MONTH(@date_final)
显然这效果不太好,所以我在这里。 MySQL 每月/每年仅向我返回一些值,这不好。当我添加 COUNT(*) 子句时,情况会变得更糟。我只是 mysql 的新手,我想我已经陷入了困境:P
##Sample data for Table1##
#id session_id date#
1 1 NULL
2 NULL 2013-01-04
3 2 NULL
4 NULL 2013-01-20
5 NULL 2013-02-22
6 3 NULL
##Sample data for Table2##
#id session_date#
1 2013-01-02
2 2013-01-10
3 2013-03-02
预期结果?像这样的东西:
2013 January 3
2013 February 2
2013 March 1
最佳答案
其中一个可能是您打算:
SELECT table1.date AS date1,
table2.session_date AS date2,
coalesce(table1.date, table2.session_date) AS date_final,
MONTHNAME(coalesce(table1.date, table2.session_date)) AS `month`,
YEAR(coalesce(table1.date, table2.session_date)) AS `year`
FROM table1 LEFT JOIN
table2
ON table2.id = table1.session_id
GROUP BY MONTHNAME(coalesce(table1.date, table2.session_date)),
YEAR(coalesce(table1.date, table2.session_date))
order by `month`, `year`;
为此,您不需要 session 变量。
关于mysql - 根据mysql中的计算字段对数据进行分组和计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818123/