如何显示今天日期列,时间列,上一个日期列,时间列

时间:2009-06-22 14:54:57

标签: sql-server ms-access sql-server-2000

使用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

需要查询帮助?

3 个答案:

答案 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