InTime и OutTime для измененной даты? - PullRequest
0 голосов
/ 11 июня 2009

Использование 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

.......... Итак,

Intime должен> 030000 и Outtime должен <030001 в соответствии с датой cardevent. </p>

В столбце Cardeventtime значение First должно принимать значение Intime, а значение Last должно принимать значение Outtime в соответствии с Cardno, Cardeventdateadjusted.

Ожидаемый результат Как это.

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 голосов
/ 11 июня 2009

Изменить: вопрос был изменен при редактировании до такой степени, что длинный подробный ответ не имел никакого отношения к его текущему состоянию, поэтому я также перезапускаю с нуля.

Запрос является неоднозначным (в нем никогда четко не указано, какое время и какое время) и, по-видимому, противоречивым. Например, один запрос:

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

но другая указанная точка -

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

В этом вопросе нет информации, так как теперь он говорит о том, что может означать «согласно» (какие арифметические манипуляции могут подразумевать или требовать). Игнорируя это совершенно неуказанное условие, вы просите показать 025050, а ТАКЖЕ просить, чтобы оно было> 030000: законы арифметики запрещают это.

Я потратил слишком много часов, пытаясь прочесть ваши мысли и разрешить противоречия и неясности - это становится нелепым. Если следующее редактирование не даст четко определенную, не двусмысленную, непротиворечивую спецификацию, я ухожу отсюда.

0 голосов
/ 11 июня 2009

ОК, я знаю, что это будет ужасно, но вы можете сделать ...

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
...