我有一个表,其中包含ID,开始,状态列。开始是用户获得某种状态并将其保存为unix时间戳的时间。
此表具有数千次匹配,同一年将多次出现在“开始”列中,但我只希望年份一次。
我希望它看起来像这样
year status14Count Status15Count 2013 8235 23423 2014 394 2187 2015 111 111
不是这样
year status14Count Status15Count 2013 8235 23423 2013 8235 23423 2014 394 2187 2015 111 111
我尝试用“ LIMIT”和BETWEEN进行选择,可以这样做吗? 任何提示和指示都会有所帮助!
答案 0 :(得分:1)
这是猜测:您没有向我们显示您的查询。我无法告诉您status14Count
和status15Count
的去向。但是这种事情应该起作用。您需要聚合函数和GROUP BY。
SELECT YEAR(FROM_UNIXTIME(timestamp)) year,
SUM(status=14) status14Count,
SUM(status=15) status15Count
FROM TABLE
GROUP BY YEAR(FROM_UNIXTIME(timestamp))
ORDER BY YEAR(FROM_UNIXTIME(timestamp))
之所以起作用,是因为status=14
之类的表达式为true时为1,为false时为0,而status
为NULL时为NULL。
答案 1 :(得分:0)
嗯,GROUP BY
不能工作吗?
SELECT * FROM `table` GROUP BY `year`;
答案 2 :(得分:0)
听起来像有条件计数的工作。
SELECT
FROM_UNIXTIME(`start`, '%Y') AS `year`,
COUNT(CASE WHEN `status` = 14 THEN 1 END) AS status14Count,
COUNT(CASE WHEN `status` = 15 THEN 1 END) AS status15Count
FROM YourTable
GROUP BY `year`
ORDER BY `year`;