我正在使用mysql作为我的数据库。我在表格中创建了分析细节。我想在图表中显示该数据。我已经创建了有关特定链接中的点击和数据库中保存的日期时间的数据。 表就像
namespace Mono
{
/*
* The managed equivalent of the unmanaged Types
* TODO:
* - Find out when to call Free.
*/
internal sealed partial class Types {
class KindComparer : IEqualityComparer<Kind> {
public bool Equals (Kind x, Kind y)
{
return x == y;
}
public int GetHashCode (Kind obj)
{
return (int) obj;
}
}
我希望将数据显示为基于今天的小时数
id | datetime
-------------
1 | 2016-04-18 05:26:36
2 | 2016-04-18 07:26:36
3 | 2016-04-18 09:26:36
4 | 2016-04-18 11:26:36
5 | 2016-04-18 08:26:36
6 | 2016-04-18 05:26:36
7 | 2016-04-18 20:26:36
8 | 2016-04-18 18:26:36
同样适用于工作日(周日,周一,周二......周六)的周,而不是小时,周数(1,2,3,4,5 ...... 28/29/30/31)每月细节。
我使用了今天列表的查询,但它只给出数据所在的小时名称。如果那小时内没有任何值,我需要填写0的所有小时列表。
我正在使用此查询。
hour | click
---------------
1 | 0
2 | 0
3 | 0
4 | 0
5 | 2
6 | 0
7 | 1
8 | 1
9 | 1
10 | 0
11 | 1
12 | 0
13 | 0
14 | 0
15 | 0
16 | 0
17 | 0
18 | 1
19 | 0
20 | 1
21 | 0
22 | 0
23 | 0
24 | 0
我正在使用查询七天,但它也会在数据库中显示当天的记录,而不是显示剩余天数的显示0。
这是查询。
SELECT DISTINCT(hour(`beacon_date_time`)) as hour,COUNT(*) from beaconanalytics WHERE DATE_FORMAT(`beacon_date_time`,'%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d') AND DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP by hour(`beacon_date_time`)
答案 0 :(得分:0)
试试这个,看起来有点奇怪;)
SELECT tmp.hour, sum(tmp.click) AS click
FROM
(SELECT DISTINCT
(hour(`beacon_date_time`)) AS hour,
COUNT(*) AS click
FROM beaconanalytics
WHERE DATE_FORMAT(`beacon_date_time`, '%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),
'%Y-%m-%d') AND DATE_FORMAT(NOW(), '%Y-%m-%d')
GROUP BY hour(`beacon_date_time`)
UNION
SELECT 1 AS hour, 0 AS click FROM dual
UNION
SELECT 2 AS hour, 0 AS click FROM dual
UNION
SELECT 3 AS hour, 0 AS click FROM dual
UNION
SELECT 4 AS hour, 0 AS click FROM dual
UNION
SELECT 5 AS hour, 0 AS click FROM dual
UNION
SELECT 6 AS hour, 0 AS click FROM dual
UNION
SELECT 7 AS hour, 0 AS click FROM dual
UNION
SELECT 8 AS hour, 0 AS click FROM dual
UNION
SELECT 9 AS hour, 0 AS click FROM dual
UNION
SELECT 10 AS hour, 0 AS click FROM dual
UNION
SELECT 11 AS hour, 0 AS click FROM dual
UNION
SELECT 12 AS hour, 0 AS click FROM dual
UNION
SELECT 13 AS hour, 0 AS click FROM dual
UNION
SELECT 14 AS hour, 0 AS click FROM dual
UNION
SELECT 15 AS hour, 0 AS click FROM dual
UNION
SELECT 16 AS hour, 0 AS click FROM dual
UNION
SELECT 17 AS hour, 0 AS click FROM dual
UNION
SELECT 18 AS hour, 0 AS click FROM dual
UNION
SELECT 19 AS hour, 0 AS click FROM dual
UNION
SELECT 20 AS hour, 0 AS click FROM dual
UNION
SELECT 21 AS hour, 0 AS click FROM dual
UNION
SELECT 22 AS hour, 0 AS click FROM dual
UNION
SELECT 23 AS hour, 0 AS click FROM dual
UNION
SELECT 24 AS hour, 0 AS click FROM dual) tmp
GROUP BY tmp.hour
每周尝试一次;)
SELECT tmp.dayname, sum(tmp.click) AS click
FROM
(SELECT dayname(`beacon_date_time`) as dayname,COUNT(*) AS click from beaconanalytics WHERE DATE_FORMAT(`beacon_date_time`,'%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 7 DAY),'%Y-%m-%d') AND DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP by dayname(`beacon_date_time`)
UNION
SELECT 'Monday' AS dayname, 0 AS click FROM dual
UNION
SELECT 'Tuesday' AS dayname, 0 AS click FROM dual
UNION
SELECT 'Wednesday' AS dayname, 0 AS click FROM dual
UNION
SELECT 'Thursday' AS dayname, 0 AS click FROM dual
UNION
SELECT 'Friday' AS dayname, 0 AS click FROM dual
UNION
SELECT 'Saturday' AS dayname, 0 AS click FROM dual
UNION
SELECT 'Sunday' AS dayname, 0 AS click FROM dual
) tmp
GROUP BY tmp.dayname
答案 1 :(得分:0)
请尝试
SELECT days.daynum, IF(count.c IS NULL, 0, count.c) from
(
SELECT t*10+u daynum
FROM
(SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A,
(SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7
UNION SELECT 8 UNION SELECT 9) B
ORDER BY daynum
) as days
LEFT JOIN
(
SELECT DISTINCT(hour(`beacon_date_time`)) as hour,COUNT(*) as c from beaconanalytics WHERE DATE_FORMAT(`beacon_date_time`,'%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d') AND DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP by hour(`beacon_date_time`)
) as count ON count.hour = days.daynum ORDER BY days.daynum