使用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,名称,cardeventdate,Intime,Outtime,昨天cardeventdate(上一栏目日期),昨日停课时间(上一栏停电时间)
对于Cardno - 0001
姓名 - 迈克尔
日期 - 20080811
银泰 - 102746
停电时间 - 185249
昨天日期 - 102746
昨天的外出时间 - 185249
例如,今天的Intime是090000,Outtime是180000 我想显示Today Date,Intime,Outtime,Previous Date Column,Previous Outtime Column属于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
需要查询帮助?
答案 0 :(得分:1)
“上一页”不是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以及排名函数可以获得更灵活的解决方案 - 如果您有兴趣,请查看我的博客文章:
http://thehobt.blogspot.com/2009/02/rownumber-rank-and-denserank.html
答案 1 :(得分:0)
你不能将字符串转换为smalldatetime然后从日期中删除一个 - 例如强制转换('20080102'作为smalldatetime)-1
答案 2 :(得分:0)
你不能将字符串转换为smalldatetime然后从日期中删除一个 - 例如强制转换('20080102'作为smalldatetime)-1
施放('20080101'作为smalldatetime)-1将返回20080100