【问题标题】:Retrieve Data Weekly每周检索数据
【发布时间】:2014-07-05 08:35:22
【问题描述】:

我只是想问一下是否有一个查询可以从下表中检索数据,如下所示:-

每周我都想显示客户支付的总金额。所以我想每周检查每个客户的钱。

Customer  |   Date      |Money|
----------------------------------------------------------------------
Jhon        2014-07-01    22
Ammy        2014-07-02    25
Jhon        2014-07-03    21
Josh        2014-07-04    28
Josh        2014-07-05    30
Ammy        2014-07-06    211
Jhon        2014-07-07    217

谢谢...

【问题讨论】:

  • 同时添加你的代码,你在其中尝试过一些东西
  • 基本上你在WHERE clause 和 MySQL 的日期和时间函数的帮助下限制了特殊周的行。然后按客户名称和SUM 进行分组。
  • 我试过这个查询来检索每个月的数据 $id 是一个文本框中的值 SELECT Customer,MONTH(Date), SUM(Money) as TotalPaid, FROM Customer Where MONTH(Date) ={$id} GROUP BY Customer"; 但我需要的是,每周过去我都希望显示一个查询,希望显示客户支付的总金额。
  • 您必须定义一周的开始和结束,以便编写返回正确数据的可靠查询。

标签: php html mysql sql database


【解决方案1】:

您可以使用GROUP BYWEEK函数来做到这一点:

SELECT customer, WEEK(date) AS week, SUM(money) AS total
FROM table
GROUP BY customer, WEEK(date);

这里是 sqlfiddle:http://sqlfiddle.com/#!2/f0754f/1


如果您只想要当前周,您可以添加WHERE 子句:

SELECT customer, WEEK(date) AS week, SUM(money) AS total
FROM table
WHERE WEEK(date) = WEEK(NOW())
GROUP BY customer, WEEK(date);

【讨论】:

    【解决方案2】:

    您的SQL 查询应该是这样的:

    更新

    SELECT Customer, sum(Money) as TotalMoney from MoneyTable 
    WHERE `Date` BETWEEN DATE_ADD(NOW(), interval -1 WEEK) and NOW() group by Customer
    

    构建一个 PHP 脚本并每周运行该查询,然后对数据做任何您喜欢做的事情。

    现在的问题是如何每周运行它?

    如果您使用的是 linux,则可以使用cron 服务。像这样设置它:

    5 8 * * 6 php /my/script/location/script.php
    

    如果您使用的是 Windows,请尝试调度程序并通过 bat 文件或其他方式运行您的脚本。

    希望能给你这个想法。祝你好运!

    【讨论】:

    • 我试过这个查询来检索每个月的数据 $id 是一个文本框中的值 SELECT Customer,MONTH(Date), SUM(Money) as TotalPaid, FROM Customer Where MONTH(Date) ={$id} GROUP BY Customer"; 但我需要的是,每周过去我都希望显示一个查询,希望显示客户支付的总金额。
    • @lodev09:您也应该添加客户列。
    • 为什么要将查询限制在指定时间?如果 CRON 作业按分钟永久执行脚本,您的回答是正确的,但是,当 CRON 作业负责每周执行时,一个简单的 QUERY 就足够了......
    • @MostafaTalebi 这个答案比你的好很多。也许不是时间表。
    • @MostafaTalebi 这还不够,因为它会从以前的日期获得所有其他钱。
    【解决方案3】:

    您的问题不明确...我想您想获得一周的数据

    SELECT sum(Money) as TotalPaid FROM yourtable
    WHERE Date between date_sub(now(),INTERVAL 1 WEEK) and now();
    

    如果你需要两周时间,使用这样的东西

     SELECT 'last week' AS week, COUNT(*) AS rows 
    FROM table_name
    WHERE date_logged >= CURDATE() - INTERVAL  6 DAY 
      AND date_logged  < CURDATE() + INTERVAL  1 DAY
    UNION ALL
    SELECT 'previous week' AS week, COUNT(*) AS rows 
    FROM table_name 
    WHERE date_logged >= CURDATE() - INTERVAL 13 DAY
      AND date_logged  < CURDATE() - INTERVAL  6 DAY ;
    

    【讨论】:

    • 我试过这个查询来检索每个月的数据 $id 是一个文本框中的值 SELECT Customer,MONTH(Date), SUM(Money) as TotalPaid, FROM Customer Where MONTH(Date) ={$id} GROUP BY Customer"; 但我需要的是,每过几周我都想要一个查询来显示想要显示客户支付的总金额。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多