繁体   English   中英

Mysql查询本月至今,上个月和上个月

[英]Mysql query for month to date, last month and previous month

我有一个 post_meta 数据库,其中包含以下字段:meta_id、post_id、meta_key、meta_value

我在 PhpMyAdmin 中创建了一个视图,以仅隔离那些具有特定文本的记录,以显示客户列表和约会时间。 每条记录都是唯一的,因此对于有多个约会的客户,他们的姓名相同,但时间和 ID 不同。 名称和时间包含在 meta_value 列中。 列视图

下面是一个例子:

postID | appt_date  |   firstname    | lastname
-----------------------------------------------
2106   | 1427698800 |   Sam          | Snead
2107   | 1428649200 |   John         | Miller
2108   | 1428476400 |   Sam          | Snead

我的挑战是拉取本月迄今为止、上个月(例如 9 月)和上个月(例如 8 月)的约会数量,以及当月的唯一客户总数。 我将绘制此图,以便结果是带有 8 月客户(列)和 8 月约会(线)的柱状图和线状图,模拟 9 月。MTD 将是前一个月加上该月到目前为止的任何新客户和约会.

我不太走运,因为日期是 Unix 格式和本月至今(当然,这取决于一个月中的哪一天)。 此外,客户多次出现(其中一些已经预约了 50 次),因此只选择他们一次是一个挑战。

您可以使用一些 date() (在 php 端)获得本月和上个月:

$this_month = date("Y-m-d");
$last_day_this_month = date("Y-m-t", strtotime($this_month));
$first_day_this_month = date("Y-m-01", strtotime($this_month));
$next_month = date("Y-m-01", strtotime($last_day_this_month." + 5 days"));
$last_month = date("Y-m-01", strtotime($first_day_this_month." - 5 days"));

处于 unix 时间只需在 unix 时间使用日期,您将获得格式化的时间。

其余的只是在 SQL 部分中对子句进行一些计数或分组。

首先,你似乎想要这个:

您希望客户 A 在 9 月份的总约会次数与 8 月份相同。 我说得对吗?

在这种情况下,您需要找出要在查询中查看的正确日期/时间,您可以通过使用纪元转换器(例如( https://www.unixtimestamp.com/index.php )来完成此操作)

当您找到正确的时代时,您可以在您的地方使用那些时代,即:

where appt_date  < (highest epoch last day of month with time 00:00) and 
appt_date  > (last day of previous month time 00:00)

这隔离了您想要的月份的第一天和最后一天之间的时间。

对于您的第二个问题:以及当月的唯一客户总数。 我建议您看看如何使用 distinct 或 group by 函数。

您可以使用FROM_UNIXTIME()函数将 unix 时间戳转换为日期,然后使用MONTH()函数获取月份编号。 像这样的东西:

SELECT COUNT(*) as number_of_appointments, MONTH(FROM_UNIXTIME(appt_date)) as number_month 
    FROM {your_view} 
    GROUP BY number_month 

将为您提供每月的约会总数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM