簡體   English   中英

SQL DB 中所有行的計數日期范圍

[英]Count Date Range for all rows in SQL DB

我試圖計算用戶在某個日期期間打卡的天數,因為用戶可以一次打卡幾天我需要找出兩個日期之間的差異,然后計算每個日期的總天數日期期間內的列,並且僅在 accountid 匹配的位置。

有沒有人對我哪里出錯有任何建議。


數據庫表

id, datein, dateout, accountid
1, 2022-08-01, 2022-08-03, 1
2, 2022-08-04, 2022-08-05, 2
3, 2022-08-05, 2022-08-05, 1
4, 2022-08-05, 2022-08-08, 1
5, 2022-08-06, 2022-08-07, 2
6, 2022-08-06, 2022-08-08, 3
7, 2022-08-07, 2022-08-10, 1
8, 2022-08-08, 2022-08-08, 2

代碼

<?php
$accountid =$user->data()->id;
$monthdate=date("Y-m-d", strtotime("-1 month")); 
$crrntdte=date("Y-m-d");
$query3=mysqli_query($conn,"SELECT DATEDIFF('datein', 'dateout') as monthlysessions from addsession where ((datein) between '$monthdate' and '$crrntdte') && (accountid='$accountid');");
$result3=mysqli_fetch_array($query3);
$sum_monthly_sessions=$result3['monthlysessions'];
?>

<?php echo $sum_monthly_sessions;?>

如果你想獲得前 30 天的總和,你可以在DATEDIFF之前添加SUM並且如果你想讓它連續

SUM(IF(DATEDIFF(dateout, datein) = 0, DATEDIFF(dateout, datein) +1, DATEDIFF(dateout, datein)))

你可以用這個,這樣的選擇可以做得更好,但最簡單。 但是如果你想讓它像上個月一樣,例如它是八月,那么從 2022-08-01 到 2022-08-31,使用這樣的東西:

SELECT 
    SUM(IF(DATEDIFF(dateout, datein) = 0, DATEDIFF(dateout, datein) + 1, DATEDIFF(dateout, datein))) 
FROM 
    addsession
WHERE 
    accountid = 1 
    AND MONTH(datein) = MONTH(CURRENT_DATE());

暫無
暫無

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

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