【发布时间】:2012-07-27 03:39:39
【问题描述】:
我有一个表格:userid 和 timestamp 每次用户打开一个页面时都会插入一个新字段。
我正在尝试获取小时 / 分钟 / 天 / 周出现在多个用户的间隔为 1 个月。
我尝试了一堆不同的查询,但每个查询都非常低效。
理想情况下,我希望得到类似的结果:
userid | minutes | hours | days | weeks
1 10080 168 7 1
2 1440 24 1 0
希望有人可以阐明如何做到这一点。
以下是我尝试过的查询:
SELECT
w.time AS `week`,
d.time AS `day`,
h.time AS `hour`,
m.time AS `minutes`
FROM (
SELECT
SUM( t.time ) AS `time`
FROM (
SELECT
COUNT( DISTINCT WEEK( `timestamp` ) ) AS `time`
FROM table
WHERE
userid = "1"
AND
`timestamp` > DATE_SUB( NOW( ) , INTERVAL 1 MONTH )
GROUP BY MONTH( `timestamp` )
) t
) w,
(
SELECT
SUM( t.time ) AS `time`
FROM (
SELECT
COUNT( DISTINCT DAY( `timestamp` ) ) AS `time`
FROM table
WHERE
userid = "52"
AND
`timestamp` > DATE_SUB( NOW( ) , INTERVAL 1 MONTH )
GROUP BY MONTH( `timestamp` )
) t
) d,
(
SELECT
SUM( t.timestamp ) AS `time`
FROM (
SELECT
COUNT( DISTINCT HOUR( `timestamp` ) ) AS `time`
FROM table
WHERE
userid = "1"
AND
`timestamp` > DATE_SUB( NOW( ) , INTERVAL 1 MONTH )
GROUP BY DAY( `timestamp` )
) t
) h,
(
SELECT
SUM( t.timestamp ) AS `time`
FROM (
SELECT
COUNT( DISTINCT MINUTE( `timestamp` ) ) AS `time`
FROM table
WHERE
userid = "1"
AND
`timestamp` > DATE_SUB( NOW( ) , INTERVAL 1 MONTH )
GROUP BY HOUR( `timestamp` )
) t
) m
这个任务似乎太过分了,也许有人有更好的东西?
【问题讨论】:
-
您尝试过哪些查询?我很难理解您的源数据。
-
inefficient.- 你如何衡量效率? -
我只是在思考这个问题并创建了一些奇怪的查询。抱歉,我没有费心添加它们,因为它们很古怪
-
我很难理解为什么您需要所选答案中的查询返回的结果集。具有两行时间戳为“2012-07-25 22:55:30”的用户 ID 的分钟值为 55+55=110。具有四行时间戳为 '2012-07-25 23:02:15' 的用户 ID 的分钟值为 02+02+02+02= 8。我只是无法思考该结果集是什么问题答案,或者为什么您希望将其作为结果集。这对我来说似乎很奇怪,因为我无法理解这需要什么。 (我的答案是完全不同的方向。)
-
你说得对,在测试时它并没有给我想要的东西,我只是看了一眼,认为这是我所期待的简单解决方案并接受了它。事实证明,这就是那些日子之一。我很想看看你想出了什么解决方案。我将发布我遇到的一个问题,这似乎是一项简单的任务,我不知道为什么它让我如此悲伤!