C# 如何根据最新日期和时间或日期和时间列查询SQL以获取最新记录?
情况: SerialNumber有重复的行,我需要选择最新的记录并获取状态值,它通过或失败都无关紧要 SerialNumber必须基于上一个StationNumber进行检查。 示例:我想获取Station 2中最新记录序列号197601234512345的状态值,因此下面命令行中的值StationNumber=@Station实际上是Station 1 情景: SerialNumber在站1中可以是通过或失败,然后SerialNumber exp:197601234512345被转发到站2。在站点2中,需要检查序列号exp:197601234512345在上一个站点号站点1中的最新状态 数据库数据库中的示例表: 身份证件 序列号 日期 时间 日期和时间 地位 站号 213939 197601234512344 2021-04-28 上午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 14:30:00 失败 车站2 213942 197601234512345 2021-04-28 下午12时11分 2021-04-28 14:31:00 失败 车站2 213943 197601234512344 2021-04-28 下午十二时 2021-04-28 14:35:00 失败 车站3 213944 197601234512344 2021-04-28 下午12时05分 2021-04-28 14:46:00 失败 车站3 213945 197601234512344 2021-04-28 下午12时10分 2021-04-28 14:47:00 通过 车站3C# 如何根据最新日期和时间或日期和时间列查询SQL以获取最新记录?,c#,mysql,sql,asp.net,C#,Mysql,Sql,Asp.net,情况: SerialNumber有重复的行,我需要选择最新的记录并获取状态值,它通过或失败都无关紧要 SerialNumber必须基于上一个StationNumber进行检查。 示例:我想获取Station 2中最新记录序列号197601234512345的状态值,因此下面命令行中的值StationNumber=@Station实际上是Station 1 情景: SerialNumber在站1中可以是通过或失败,然后SerialNumber exp:197601234512345被转发到站2。在
您可以使用order by获取最新的行顶部,使用Limit 1只能选择第一行
Select Status from db.station where SerialNumber = @SN and StationNumber = @Station order by CAST(Date_Time as DateTime) desc
limit 1
DB小提琴:
架构和插入语句:
create table station (SerialNumber varchar(50), Date varchar(50), Time varchar(50), Date_Time varchar(50), Status varchar(50),StationNumber varchar(50));
insert into station values('197601234512345' ,'2021-04-28','11.53 AM' ,'2021-04-28 11:53:00' ,'PASS', 'Station 1');
insert into station values('197601234512345' ,'2021-04-28','11.54 AM', '2021-04-28 11:54:00' ,'FAIL', 'Station 1');
insert into station values('197601234512345' ,'2021-04-28','12.00 PM', '2021-04-28 12:00:00' ,'PASS', 'Station 1');
insert into station values('197601234512345' ,'2021-04-28','12.05 PM', '2021-04-28 12:05:00' ,'FAIL', 'Station 2');
insert into station values('197601234512345' ,'2021-04-28','12.10 PM', '2021-04-28 12:10:00' ,'PASS', 'Station 2');
查询:
Select Status from station where SerialNumber ='197601234512345' and StationNumber = 'Station 1' order by CAST(Date_Time as DateTime) desc
limit 1
输出:
地位
通过
要获取所有SerialNumber的最后一行,请使用:
MySQL 8+
WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY SerialNumber ORDER BY Date_Time DESC) rn
FROM db.station )
SELECT *
FROM cte
WHERE rn = 1;
MySQL 5+
SELECT db.station.*
FROM db.station
NATURAL JOIN ( SELECT SerialNumber, MAX(Date_Time) Date_Time
FROM db.station
GROUP BY SerialNumber ) maxdates
如果您只需要特定SerialNumber值的这些数据,请添加REQUIRE WHERE子句
如果您需要的数据不是SerialNumber,而是SerialNumber,那么StationNumber将相应地修改查询
对于单个序列号值-根据日期的位置和顺序\u Time DESC LIMIT 1就足够了。解决方案:
我的情况和发生在美国的情况有点关联
因此,我的新SQL命令
SELECT a.ID, a.Date_Time, a.Status FROM db.station a, (SELECT MAX(ID) as id FROM db.station WHERE SerialNumber = @SN Group by StationNumber = @Station) b WHERE a.ID = b.id
我测试在站点3中插入序列号197601234512345
最后,它从上一个站点2获取最新的行
身份证件
序列号
日期
时间
日期和时间
地位
站号
213942
197601234512345
2021-04-28
下午12时11分
2021-04-28 14:31:00
通过
车站2
这回答了你的问题吗?请显示您的c代码以及Sqlreader如何不执行ExecuteReaderHi@KaziMuhammadAliNur,我尝试过您的sql命令,但它给了我糟糕的输出。请参阅上面我的代码片段更新帖子。不是选择序列号,而是选择SerialNumberSorry@KaziMuhammahAliNur。编辑要发布的代码时,这只是我的打字错误。在visualstudio中,我确实使用了selectserialnumber