如何使用 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 查询获取包括当前周在内的最后四个星期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ssis 包中的变量中获取当前周星期一的日期

如何在 SQL 或 PHP 中获取不包括假期(法语)和工作日的最后三天

SQL SERVER查询时间是一年中第几周的函数

如何找到包括当前金额在内的一年的先前金额的总和

SQL“之间”不包括在内

sql 如何获取当前时间,所属周的开始时间和结束时间,周一为一个星期的第一天