首页 > 解决方案 > 根据 Mysql 表中的同一月份计算 Date 列

问题描述

假设我有一个带有 empID 和日期列的 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 的数据,则查询应检查它并且必须触发电子邮件。我怎样才能完成它?提前致谢....

标签: c#mysql

解决方案


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"]);
        }
    }
}

推荐阅读