c# - 如何根据用户输入查询 SQL 以获取最新记录?
问题描述
情况:序列号有重复的行,我需要对最新记录进行计数并获取值计数。
来自 db 数据库的示例表站:
ID | 序列号 | 日期 | 时间 | 约会时间 | 地位 | 电台编号 |
---|---|---|---|---|---|---|
213939 | 197601234512344 | 2021-04-27 | 上午 11.53 | 2021-04-28 11:53:00 | 经过 | 1号站 |
213940 | 197601234512345 | 2021-04-28 | 上午 11.54 | 2021-04-28 11:54:00 | 失败 | 1号站 |
213941 | 197601234512345 | 2021-04-28 | 中午 12 点 11 分 | 2021-04-28 12:11:00 | 失败 | 2号站 |
213942 | 197601234512345 | 2021-04-28 | 下午 12.31 | 2021-04-28 12:31:00 | 失败 | 2号站 |
213943 | 197601234512345 | 2021-04-28 | 下午 12.32 | 2021-04-28 12:32:00 | 经过 | 2号站 |
213943 | 197601234512344 | 2021-04-28 | 中午 12 点 40 分 | 2021-04-28 12:40:00 | 经过 | 3号站 |
213945 | 197601234512344 | 2021-04-29 | 下午 12.45 | 2021-04-28 12:45:00 | 失败 | 3号站 |
213946 | 197601234512344 | 2021-04-29 | 中午 12 点 10 分 | 2021-04-28 12:10:00 | 失败 | 3号站 |
场景:假设表中的上述数据,
需要考虑的事情:
我需要根据不同的 StationNumber分别计算 PASS 和 FAIL 的 SerialNumber 。有目的的单独计数是为了向用户显示 Gridview 中的计数输出。
如果特定 StationNumber 中的 SerialNumber 最新记录已经具有 Status PASS,
- 这意味着 Status FAIL 不必计算在内。序列号 197601234512345 与站 2 的示例
- 如果特定 StationNumber 中的 SerialNumber 最新记录已经具有 Status FAIL,
- 这意味着状态 PASS 不必计算在内。序列号 197601234512344 与站 3 的示例
- 我还需要考虑 Date_Time 以及用户选择的输入。
来自用户的示例输入:
输入 |
---|
日期自:2021-04-27 |
日期:2021-04-29 |
时间:上午 10 点 |
时间:01.00 PM |
示例输出:
电台编号 | 经过 | 失败 |
---|---|---|
1号站 | 1 | 1 |
2号站 | 1 | 0 |
3号站 | 0 | 1 |
@DateFrom - 将有 Date From + Time From //这部分不用担心,我很好
@DateTo - 将有 Date To + Time To //这部分不用担心,我很好
到目前为止,我已经尝试了以下 mySQL 命令来查询,但没有一个有效 =(
试试 1
//For PASS
Select a.ID, Count(a.SerialNumber) from db.station a, (Select MAX(ID) as id from db.station Group by StationNumber = @Station) b WHERE a.ID = b.ID and Status = @status and Date_Time between @DateFrom and @DateTo
//For FAIL
Select a.ID, Count(a.SerialNumber) from db.station a, (Select MAX(ID) as id from db.station Group by StationNumber = @Station) b WHERE a.ID = b.ID and Status = @status and Date_Time between @DateFrom and @DateTo"
试试 2
//For PASS
Select Count(Distinct(a.SerialNumber)) from db.station a, (Select MAX(SerialNumber) as sn from db.station where Status = @status and Date_Time between @DateFrom and @DateTo Group by StationNumber = @Station)b Where a.SerialNumber = b.sn
//For FAIL
Select Count(Distinct(a.SerialNumber)) from db.station a, (Select MAX(SerialNumber) as sn from db.station where Status = @status and Date_Time between @DateFrom and @DateTo Group by StationNumber = @Station)b Where a.SerialNumber = b.sn
希望任何人都可以帮助并发现错误或有解决方案。谢谢你。
解决方案
推荐阅读
- python - 如何从 Pyimagej 绘制直方图的图像?
- python - 无法在字符串列上使用 json.loads()
- c# - 在哪里使用 WebClient 在 Mac 上下载文件?
- cluster-computing - 我可以查看已完成的 SLURM 作业是否依赖于依赖项?
- python - 在 tkinter 中设置从框架类继承的对象的宽度和高度
- python - 在open3d中沿单轴缩放
- android - 如何修复android studio中的“模拟器进程被杀死”错误?
- mariadb - 我删除了 log 文件夹中的 mariaDB 二进制日志,因为它们占用了太多空间,现在 mariaDB 无法启动
- r - 抓取 Web 数据 - 从表格到 Excel 或 R
- spring - 如何访问位于@Service 类中的 SseEmitters 集合