Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据最新日期和时间或日期和时间列查询SQL以获取最新记录?_C#_Mysql_Sql_Asp.net - Fatal编程技术网

C# 如何根据最新日期和时间或日期和时间列查询SQL以获取最新记录?

C# 如何根据最新日期和时间或日期和时间列查询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。在

情况: 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 通过 车站3
您可以使用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