修改日期的InTime和OutTime?

时间:2009-06-11 05:16:38

标签: sql sql-server-2000

使用SQL Server 2000 表

CARDNO         CARDEVENTDATE       CARDEVENTDATE    CARDEVENTTIME
                                     ADJUSTED 

  0121      20090611            20090610            025050
  0121      20090611            20090611            040000
  0121      20090611            20090611            050000
  0121      20090612            20090611            020000
  0122      20090611            20090611            030001
  0122      20090612            20090611            030000
  0123      20090611            20090611            080000
  0123      20090611            20090611            100000
  0123      20090611            20090611            132449
  0123      20090612            20090611            025959
  0124      20090611            20090610            030000
  0124      20090612            20090612            030001
  0125      20090611            20090611            030002
  0125      20090612            20090612            040000

从上表我想显示特定卡事件调整日期的银泰和停机时间

离开CardEventDate。

我想要显示Cardno,CardeventDateAdjusted,Cardeventtime

Cardno – 121
CardeventDateAdjusted - 20090611
Intime – 040000, Outtime – 020000

Cardno – 121
CardeventDateAdjusted - 20090610
Intime – 025050, Outtime – No

Cardno – 122
CardeventDateAdjusted - 20090611
Intime – 030001, Outtime – 030000

.........。所以,

银泰应> 030000和Outtime应该< 030001根据cardeventdateadjusted。

在Cardeventtime列中,First值应采用Intime,Last值应根据Cardno,Cardeventdateadjusted进行Outtime。

预期输出就像这样。

CARDNO           CARDEVENTDATE  INTIME  OUTTIME
                    ADJUSTED   

   0121             20090611        040000  020000
   0121             20090610        025050     -
   0122             20090611        030001  030000
   0123             20090611        080000  025959
   0124             20090610        030000     -
   0124             20090612        030001     -
   0125             20090612        040000     -
   0125             20090611        030002     -

输出时间中有空白列,因为日期上没有外出时间。所以我需要像这样的输出。

2 个答案:

答案 0 :(得分:0)

好的,我知道这会很难看,但你可以做......

SELECT CARDNO, 
       Min(CardEvenDateAdjusted),
       Max(CardEvenDateAdjusted)
  FROM (
        SELECT CARDNO, 
               CARDEVENTDATE, 
               (1000000 * CAST (CARDEVENTDATE AS BIGINT) + 
                          CAST (CARDEVENTTIME AS BIGINT) - 30001) / 1000000 AS CardEvenDateAdjusted, 
               CARDEVENTTIME 
          FROM T_CARDEVENT 
         WHERE (CARDEVENTDATE > 20090601) 
       )
 GROUP 
    BY CARDNO
 ORDER 
    BY CARDNO

答案 1 :(得分:0)

编辑:编辑中的问题被修改为长而详细的答案与其当前状态无关,所以我也是从头开始重新开始。

请求含糊不清(它从未清楚地指明了什么是intime和什么是outtime)并且显然是矛盾的。例如,一个请求是:

Cardno – 121 CardeventDateAdjusted - 20090610 Intime – 025050, Outtime – No

但另一个指定点是

Intime should > 030000 and Outtime should < 030001 according to the cardeventdateadjusted.

问题中只有零信息,因为它现在代表的是“根据”可能意味着什么(它可能暗示或要求的算术操作)。忽略这个完全没有说明的条件,你要求看到025050并且还要求它是&gt; 030000:算术法则禁止。

我浪费了太多时间试图阅读你的思想,解决矛盾和含糊之处 - 这太荒谬了。除非下一个编辑产生一个明确的,非模糊的,不矛盾的规范,否则我不在这里。