首页 > 解决方案 > 如何根据用户输入查询 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号站

场景:假设表中的上述数据,

需要考虑的事情:

  1. 我需要根据不同的 StationNumber分别计算 PASS 和 FAIL 的 SerialNumber 。有目的的单独计数是为了向用户显示 Gridview 中的计数输出。

  2. 如果特定 StationNumber 中的 SerialNumber 最新记录已经具有 Status PASS,

  1. 如果特定 StationNumber 中的 SerialNumber 最新记录已经具有 Status FAIL,
  1. 我还需要考虑 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

希望任何人都可以帮助并发现错误或有解决方案。谢谢你。

标签: c#mysqlasp.net

解决方案


推荐阅读