簡體   English   中英

從Mysql表基於同一月份對Date列進行計數

[英]Count the Date column based on the same month from Mysql table

可以說我有一個帶有empID和date列的MySql表。 我想獲取日期來自同一月份的empID的計數。 例如,如果empID在同一月的表中有4個日期,則應觸發一封電子郵件

using (MySqlConnection con = new MySqlConnection(serverstring))
{
     con.Open();
     string query = "SELECT COUNT(empID) FROM tblnm WHERE empID=@eid date=date";
     MySqlCommand cmd = new MySqlCommand(query, con);
     cmd.Parameters.AddWithValue("@eid", lbleid.Text);
     string cnt = cmd.ExecuteScalar().ToString();
     var count = Convert.ToInt32(cnt);
     if(count >= 4)
     {
         triggerEmail();
     }
}

因此,該月份可以是未來幾個月的任何月份,但是如果在任何幾個月的任何月份中,有4個以上具有相同empID的數據具有相同的empID,則查詢應進行檢查並必須觸發電子郵件。 我該怎么辦? 提前致謝....

MySql具有LAST_DAY()函數,可以將其與GROUP BY / HAVING子句結合使用,以輕松獲取當月的計數:

SELECT EmpID, LAST_DAY(`Date`) AS Month, COUNT(*) As NumEntries
FROM tblnm 
WHERE EmpID = @EmpID
GROUP BY EmpID, LAST_DAY(`Date`)
HAVING COUNT(*) >= 4

並像這樣使用它:

string query = @"
    SELECT EmpID, LAST_DAY(`Date`) AS Month, COUNT(*) As NumEntries
    FROM tblnm 
    WHERE EmpID = @EmpID
    GROUP BY EmpID, LAST_DAY(`Date`)
    HAVING COUNT(*) >= 4;";

using (var con = new MySqlConnection(serverstring))
using (var cmd = new MySqlCommand(query, con))
{
    cmd.Parameters.Add("@EmpID", MySqlDbType.Int32).Value = Convert.ToInt32(lbleid.Text);
    con.Open();
    using (MySqlDataReader rdr = cmd.ExecuteReader())
    {     
        while(rdr.Read())
        {
           triggerEmail(rdr["EmpID"], (int)rdr["NumEntries"]);
        }
    }
}

您可以使用此查詢:

SELECT COUNT(empID)
FROM tblnm
WHERE year(date) = year(@date) and month(date) = month(@date);

但是我會說,如果您想知道哪個empID具有四個以上的條目:

SELECT empID, COUNT(*)
FROM tblnm
WHERE year(date) = year(@date) and month(date) = month(@date)
group by empID;

暫無
暫無

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

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