c# - 根据 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 的数据,则查询应检查它并且必须触发电子邮件。我怎样才能完成它?提前致谢....
解决方案
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"]);
}
}
}
推荐阅读
- c++ - 尝试将控制台输出重定向到文本文件时,C++ 程序不会启动
- ios - SwiftUI TabView 和 NavigationView 混合 - Pop To Root 不起作用
- sql - 在不使用任何子查询的情况下按部门获得最高薪水
- java - 如何获取 MySQL 连接器 Java Maven 依赖项
- javascript - 如何在 Nuxtjs 中转到父页面
- haskell - 如何在 Haskell 中的通用“超级类型”下拥有多种类型?
- spring - 为什么我的 REST 端点没有公开?虽然应用程序运行成功。有人能指出我的错误吗
- python - 如何在 MXNet 中设置 tensor dtypes = int64 的默认值?
- reactjs - 枚举的对象文字的打字稿类型?
- reactjs - 按执行顺序反应类组件问题