Sql server 如何显示今天日期列、时间列、上一个日期列、时间列
使用Access数据库 桌子 从上表中,我想显示另外两列,如 Cardno,name,cardeventdate,Intime,Outtime,昨天cardeventdate上一列日期,昨天Outtime上一列Outtime 对于卡号–0001 姓名-迈克尔 日期:20080811 银泰-102746 休息时间–185249 昨天日期:102746 昨天休息时间–185249 例如,今天的Intime是090000,Outtime是180000 我想显示属于Cardno的今天日期、开始时间、结束时间、上一个日期列、上一个结束时间列 我的日期不是连续的,在我的数据库中日期是20090601,20090508。所以我们不能把日期定为1 我正在使用子查询 预期产量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的今天日期、开始时间、结束
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