2014-01-16 114 views
0

我试图表明今天之间,一个星期前,这里是我的查询我的下载查询查询之间的两个时间戳记日期

SELECT 
     COUNT(1) AS d_count, 
     d_timestamp 
    FROM dl_table 
    WHERE id = 'someid' 
     AND d_timestamp BETWEEN 1389830400 AND 1389260583 
    GROUP BY d_timestamp 
    ORDER BY d_timestamp ASC LIMIT 7; 

上面的查询不能正常工作,并返回我空列或返回我7列中有1个值在d_coun t这是完全错误的!哪里有问题 ?

任何想法?

注意:

1389830400等于今天戳我通过strtotime("today");得到它。

1389260583等于-1周前的时间戳,我通过strtotime("-7 day");得到它。

d_timestamp是一个整数列。

+0

转换'd_timestamp'场对比 –

+0

之前短时@SuyashKhandwe你能给我一个例子吗? – iSun

+0

为什么你必须使用GROUP BY? –

回答

2
SELECT 
    COUNT(id) AS downloads, 
    FROM_UNXTIME(d_timestamp, '%Y-%m-%d') AS day 
FROM dl_table 
WHERE id = 'someid' 
AND d_timestamp BETWEEN 1389830400 AND 1389260583 
GROUP BY day 
ORDER BY day 

这应该起作用。格式化时间戳更具可读性,即使时间戳完全不符合00:00(无论出于何种原因),它仍可以100%确保您按时分组。

+0

谢谢,这是工作 - 是否有可能显示前一天和一周前之间的所有行,因为我不知道你不想今天直到今天上午12点才播放下载吗? – iSun

+0

只是调整你的第二个时间戳,这意味着'strtotime(“今天”);'成为'strtotime(“ - 1 day”);'。 –

+0

还有一个问题 - 它正在工作,但它让我困惑了一下,当我用'FROM_UNXTIME'做出时间时,最后一天不是真的,例如,如果等于1月16日,而且我的表中有一行与今天的日期' FROM_UNXTIME'给我看1月15日,而其他行的日期是真的! – iSun

0

尝试此查询,因为它似乎有一些问题,d_timestamp列的值
SELECT COUNT(1) AS d_count, d_timestamp FROM dl_table WHERE id = 'someid' AND CAST(d_timestamp AS UNSIGNED) BETWEEN 1389830400 AND 1389260583 GROUP BY d_timestamp ORDER BY d_timestamp ASC LIMIT 7;

相关问题