使用Access数据库
表格
Cardno name cardeventdate Intime Outtime
0001 Michael 20080811 102746 185249
0001 Michael 20080812 080828 080828
0002 Michael 20080811 082615 082615
0002 Michael 20080812 073624 190605在上表中,我想显示另外两列,如
Cardno,name,cardeventdate,Intime,Outtime,昨天cardeventdate (上一列日期),昨天Outtime (上一列Outtime)
卡诺- 0001
名字-迈克尔
日期- 20080811
即时- 102746
出厂时间- 185249
昨日- 102746
昨日出厂- 185249
例如,“今日时间”为090000,“输出时间”为180000,我希望显示“今日日期”、“即时”、“超时”、“前一次日期”列、“前一次”列属于Cardno
我的日期不是连续的,在我的数据库日期是20090601,20090508。所以我们不能把日期-1
Am使用子查询
预期产出
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需要查询帮助吗?
发布于 2009-06-22 15:20:29
“以前”不是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并对函数进行排序--如果您感兴趣的话,请看我在这里的博客文章:
http://thehobt.blogspot.com/2009/02/rownumber-rank-and-denserank.html
发布于 2009-06-24 14:53:42
您不能将字符串强制转换为小日期,然后从日期中删除一个字符串吗?例如,强制转换(“20080102”作为小时间) -1
发布于 2009-07-01 11:49:51
不能将字符串强制转换为一个小时间,然后从日期中删除一个字符串,例如强制转换(“20080102”作为小时间) -1
cast(“20080101”作为小时间) -1将返回20080100
https://stackoverflow.com/questions/1027673
复制相似问题