Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Sql server 如何显示今天日期列、时间列、上一个日期列、时间列_Sql Server_Ms Access_Sql Server 2000 - Fatal编程技术网

Sql server 如何显示今天日期列、时间列、上一个日期列、时间列

Sql server 如何显示今天日期列、时间列、上一个日期列、时间列,sql-server,ms-access,sql-server-2000,Sql Server,Ms Access,Sql Server 2000,使用Access数据库 桌子 从上表中,我想显示另外两列,如 Cardno,name,cardeventdate,Intime,Outtime,昨天cardeventdate上一列日期,昨天Outtime上一列Outtime 对于卡号–0001 姓名-迈克尔 日期:20080811 银泰-102746 休息时间–185249 昨天日期:102746 昨天休息时间–185249 例如,今天的Intime是090000,Outtime是180000 我想显示属于Cardno的今天日期、开始时间、结束

使用Access数据库

桌子

从上表中,我想显示另外两列,如

Cardno,name,cardeventdate,Intime,Outtime,昨天cardeventdate上一列日期,昨天Outtime上一列Outtime

对于卡号–0001 姓名-迈克尔 日期:20080811 银泰-102746 休息时间–185249 昨天日期:102746 昨天休息时间–185249

例如,今天的Intime是090000,Outtime是180000 我想显示属于Cardno的今天日期、开始时间、结束时间、上一个日期列、上一个结束时间列

我的日期不是连续的,在我的数据库中日期是20090601,20090508。所以我们不能把日期定为1

我正在使用子查询

预期产量

Cardno name    cardeventdate Intime Outtime Yesterdaycardeventdate YesterdayOuttime

0001   Michael 20080811      102746 185249  20080810               175050
0001   Michael 20080812      080828 080828  20080811               185249
0002   Michael 20080811      082615 082615  20080810               192727
0002   Michael 20080812      073624 190605  20080811               082615

需要查询帮助吗?

在SQL Server中,“上一个”不是一个绝对的概念,它取决于数据的排序方式。您如何对结果集进行排序?我看不出所有的行都是正确的

SQL 2000解决方案很难看,但基本上看起来是这样的: **注:根据上述附加信息编辑的代码

SELECT CARDNO, CARDEVENTDATE, INTIME, OUTTIME, 
       (SELECT TOP 1 CARDEVENTDATE 
        FROM MyTable b
        WHERE a.CARDNO = b.CARDNO
        AND   a.INTIME > b.INTIME
        ORDER BY INTIME DESC) AS PREVCARDEVENTDATE,
       (SELECT TOP 1 OUTTIME
        FROM MyTable b
        WHERE a.CARDNO = b.CARDNO
        AND   a.INTIME > b.INTIME
        ORDER BY INTIME DESC) AS PREVOUTTIME
FROM   MyTable AS a
使用SQL 2005或2008和排名函数可提供更灵活的解决方案-如果您感兴趣,请查看我的博客文章:


不能将字符串强制转换为smalldatetime,然后从日期中删除一个,例如将'20080102'强制转换为smalldatetime-1吗


不能将字符串强制转换为smalldatetime,然后从日期中删除一个,例如将'20080102'强制转换为smalldatetime-1吗


将'20080101'强制转换为smalldatetime-1将按previous返回20080100

,您是指pervious in time,还是数据库中的上一行?对于当前的CARDNO,或者任何CARDNO,它是之前的吗?在预期的输出中,您似乎没有按照CARDNO或CARDEVENTDATE进行排序,所以我不太明白这个输出的意义。您能否澄清业务需求?是的,对于同一卡号,它应该显示以前的记录。不显示上一条记录它应该显示该卡的上一列日期和超时使用子查询、从时间开始的时间和超时,因此我必须如何使用您的查询。什么是mysortfield?根据您对原始问题上留下的评论的反馈,您需要按INTIME或OUTTIME进行排序,我想它们将产生相同的结果,并使用外部查询中的CARDNO筛选子查询。我已经调整了我的帖子以反映这一点-看一看。我尝试了你的查询,但它显示了错误,下面我发布了我的查询如何使用你的查询?请从中选择CARDNO、NAME、TITLENAME、CARDEVENTDATE、INTIME、OUTTIME,从中选择CARDNO、NAME、TITLENAME、CARDEVENTDATE、MINCARDEVENTTIME作为INTIME,从中选择MAXCARDEVENTTIME作为OUTTIME,从中选择T_PERSON.CARDNO、T_PERSON.NAME、T_TITLE.TITLENAME、T_CARDEVENTDATE,T_CARDEVENT.CARDEVENTTIME FROM T_TITLE internal JOIN T_PERSON ON T_TITLE.TITLECODE=T_PERSON.TITLECODE internal JOIN T_CARDEVENT ON T_PERSON.PERSONID=T_CARDEVENT.PERSONID其中T_CARDEVENT.CARDEVENTDATE介于“&sdate&”和“&edate&”之间由T_PERSON订购。TITLECODE组由CARDNO、NAME、TITLENAME、CARDEVENTDATE从何处获得该代码?这不是我发布的内容——我没有使用任何聚合函数或派生表。
SELECT CARDNO, CARDEVENTDATE, INTIME, OUTTIME, 
       (SELECT TOP 1 CARDEVENTDATE 
        FROM MyTable b
        WHERE a.CARDNO = b.CARDNO
        AND   a.INTIME > b.INTIME
        ORDER BY INTIME DESC) AS PREVCARDEVENTDATE,
       (SELECT TOP 1 OUTTIME
        FROM MyTable b
        WHERE a.CARDNO = b.CARDNO
        AND   a.INTIME > b.INTIME
        ORDER BY INTIME DESC) AS PREVOUTTIME
FROM   MyTable AS a