Как выйти первым в последнем, используя sql и проверить недостающие журналы с ночной сменой - PullRequest
0 голосов
/ 05 марта 2020
Biometric logs
---------------------------------------------------------
ID     EMP_BIO_ID   LOG_DATE     LOG_TIME   LOG_TYPE
16979   145         20140205    1653        0 
13880   145         20140206    0606        1    
13963   48          20140212    0505        0    
13964   48          20140212    1821        1
13964   48          20140212    1821        1     
13965   48          20140213    0513        0    
13966   48          20140213    1810        1    
13967   48          20140214    0512        0
13967   48          20140214    0512        0     
13968   48          20140214    1811        1    
20219   48          20140215    0606        1 
20219   48          20140215    0606        1
20219   48          20140215    0606        1   
20221   48          20140217    1810        1    
13972   163         20140203    0605        1
13973   164         20140203    0607        0
13974   165         20140203    1815        1
--------------------------------------------------

Как я могу сделать запрос на SQL Сервер для извлечения данных выглядит так:

-------------------------------------------------
EMP_BIO_ID   LOG_DATE    LOG IN    LOG OUT  
145         20140205    1653        0606            
48          20140212    0505        1821      
48          20140213    0513        1810         
48          20140214    0512        1811      
48          20140215    0606        1810   
164         20140203    0607 
165         20140203                1815          
---------------------------------------------
  • 0 для ВРЕМЕНИ В
  • 1 является на время

Мои извинения Я новичок ie в VB. NET.

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Кажется, вы хотите следующий «выход» для каждого отдельного «входа». Я бы предложил:

select li.emp_bio_id, li.log_date, li.log_time as login_time,
       lo.log_time as logout_time;
from (select distinct li.*
      from logs li
      where li.logtype = 0
     ) li outer apply
     (select top (1) lo.*
      from logs lo
      where lo.emp_bio_id = li.emp_bio_id and
            lo.logtype = 1 and
            lo.log_date = li.log_date and
            lo.log_time > li.log_time 
      order by lo.log_date desc, lo.log_time desc;
     ) lo;
0 голосов
/ 05 марта 2020

Это своего рода пробелы и проблема острова. Вы можете попробовать запрос ниже -

SELECT EMP_BIO_ID, LOG_DATE, MIN(LOG_TIME), MAX(LOG_TIME)
FROM (SELECT DISTINCT EMP_BIO_ID, LOG_DATE
             ROW_NUMBER() OVER(ORDER BY EMP_BIO_ID, LOG_DATE, LOG_TIME) SEQ1,
             ROW_NUMBER() OVER(PARTITION BY EMP_BIO_ID, LOG_DATE ORDER BY EMP_BIO_ID, LOG_DATE, LOG_TIME) SEQ2
      FROM Biometric)
GROUP BY EMP_BIO_ID, LOG_DATE, SEQ1-SEQ2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...