簡體   English   中英

計算每天/每天每個用戶的總時間-php / mysql

[英]Calculate total time of each user in single/per day - php/mysql

     > Start                    stop                  pinnumber
     > ---------------------------------------------------------
     > 2012-03-14 13:22:17    2012-03-14 15:22:50      2001
     > 2012-03-14 18:11:10    2012-03-14 19:10:10      2001
     > 2012-03-15 07:20:10    2012-03-15 13:20:50      2001
     >**2012-03-16 19:21:55       2012-03-17 02:55:22  2001** //on 16(19:21:55
                                                                     to 23:59:59) and     
                                                                 //on 17(00 to 02:55:22) 
     > 2012-03-17 14:15:05    2012-03-17 17:44:50      2001
     > 2012-03-18 19:11:10    2012-03-18 19:10:10      2002
     > 2012-03-18 10:20:10    2012-03-18 13:20:50      2003
     > 2012-03-18 11:20:10    2012-03-18 15:11:50      2001

題:

如何計算每天每個用戶每天的總時間(“開始”,“停止”)? 請查看以上突出顯示的點。 假設,如果用戶今天“開始”並且明天“停止”,那么今天的時間是否不同,明天的時間是否不同?

現在我正在使用以下查詢:

選擇SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF( stopstart ))))))以time1作為時鍾。 * FROM table_name WHERE pin_number =' pin_number BY DATE_FORMAT( start ,'%W%M%Y')

從上面的查詢中,我每天都在獲取記錄,但是開始日期和結束日期不同。 它計算的總時間不是單日時間,而是我每天所需的時間。

我想我終於到了。 首先,您需要獲取一組日期,我可以通過一個子查詢來獲得該日期,該子查詢采用了UNION的開始時間和停止時間(如果需要,可以將其過濾為您的pinnumber ,以減小JOIN的大小)。

然后,將每個這樣的日期與包含該日期的那些(start,stop)對連接(即,在一天中開始,或者一天中的開始在開始和停止時間之間)。

最后,按天分組,計算開始時間和結束時間之間的時間總和,並視情況在一天的開始和結束時間進行截斷(魔術86400是一天中的秒數= 24 * 60 * 60 )。 遺憾的是,這與夏時制,leap秒等效果不佳。

SELECT FROM_UNIXTIME(unixday, '%d/%m/%Y'), SUM(
    LEAST(   unixday+86400, UNIX_TIMESTAMP(Stop ))
  - GREATEST(unixday      , UNIX_TIMESTAMP(Start))
) AS Seconds
FROM table_name JOIN (

  SELECT UNIX_TIMESTAMP(DATE(Start)) AS unixday FROM table_name
UNION 
  SELECT UNIX_TIMESTAMP(DATE(Stop )) AS unixday FROM table_name

) AS days ON (
      UNIX_TIMESTAMP(Start) BETWEEN unixday AND unixday+86400
  OR (unixday BETWEEN UNIX_TIMESTAMP(Start) AND UNIX_TIMESTAMP(Stop))
)
WHERE pinnumber = 2001
GROUP BY unixday;

sqlfiddle上看到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM