如何使用 sql 查询获取包括当前周在内的最后四个星期
Posted
技术标签:
【中文标题】如何使用 sql 查询获取包括当前周在内的最后四个星期【英文标题】:How do I get the last four weeks including current week using an sql query 【发布时间】:2012-05-04 12:23:34 【问题描述】:我想获取包括本周在内的最近 4 周的结果。所以假设我有一个统计表,其中包含上个月 4 月的统计数据,现在是 5 月 4 日......当我写这个查询时: 我想获取唯一身份访问者:
SELECT COUNT(distinct ip ) AS uni, (
date_added
) AS wday, FROM_UNIXTIME( date_added ) AS cusotms
FROM `site_stats`
WHERE FROM_UNIXTIME( date_added ) >= DATE_SUB( SYSDATE( ) , INTERVAL 4 WEEK )
GROUP BY WEEK( FROM_UNIXTIME( date_added ) )
发现如下结果:
uni wday cusotms
2 1333819740 2012-04-07 22:29:00
6 1333906140 2012-04-08 22:29:00
7 1334510940 2012-04-15 22:29:00
7 1335115740 2012-04-22 22:29:00
5 1336089600 2012-05-04 05:00:00
但我想要最后 4 周,包括本周。我不知道为什么这显示了 5 月 4 日、4 月 22 日、4 月 15 日和 4 月 8 日和 7 日的记录。我在想像下面这样的事情
过去 4 周的结果是否正确?我在想应该是 5 月 4 日,
4 may
4-7 = 28 april
4-14days = 21 april
and then 14 april
and last 7 april
??
我需要将此输出放在图表中以显示上周的统计数据...任何帮助将不胜感激。
提前致谢!
【问题讨论】:
我不明白这个问题。在包括本周在内的最后 4 周内,您将获得想要的结果。 你的意思是它的正确结果?但我很困惑,为什么 4 月 7 日和 8 日的结果会同时出现?另外,我也想要一周的名字。例如每周的开始日期名称。即:50 个独特的:4 月 28 日,40 独特的:4 月 21 日,20 独特的:4 月 14 日?? 【参考方案1】:解决办法如下:
SELECT COUNT( DISTINCT ip ) AS uni, (
date_added
) AS wday, FROM_UNIXTIME( date_added ) AS cusotms
FROM `site_stats`
WHERE FROM_UNIXTIME( date_added ) >= CURDATE( ) - INTERVAL DAYOFWEEK( CURDATE( ) ) -3WEEK
GROUP BY WEEK( FROM_UNIXTIME( date_added ) )
LIMIT 0 , 30
希望对你有帮助:)
【讨论】:
【参考方案2】:您获取了确切的日期,您似乎想获取星期:
SELECT COUNT(distinct ip ) AS uni, (
date_added
) AS wday, WEEK( FROM_UNIXTIME( date_added ) ) AS cusotms
【讨论】:
嗨 Karoly,感谢您的快速回复,实际上我只是添加了最后一个字段来显示日期,因为日期以时间戳格式存储在 db 中。简而言之,我只想从我过去 4 周的统计表中获取唯一访问次数 (ip)。另外我不知道是否可以在上周添加不完整的一周。例如本周加上过去 4 周? 上周不完整不是问题,但您必须努力获得第一周的完整数据。 是的,我在这里需要帮助,因为我从过去 2 天开始就在处理它并且无法排序,我最近 7 天以上工作以及其他情况,但这让我感到害怕。 或者至少我想要最近 4 周的正确结果,我可以跳过这周。重要的一点是我希望它与 group by 因此我将在第一周展示我有 50 个唯一身份访问者,然后在第二个 100 等...直到第 4 周。 我更喜欢在客户端执行此操作,因为它更容易,但对于一些想法,请查看:***.com/questions/313962/… 和 ***.com/questions/6089960/…以上是关于如何使用 sql 查询获取包括当前周在内的最后四个星期的主要内容,如果未能解决你的问题,请参考以下文章