2016-05-05 5 views
-3

Использование SQL Server 2012 Management Studio.Как определить записи на основе последнего сканирования

Мне нужно определить «JobNumber», если какой-либо из «item_code_1» был отсканирован только за последние 2 часа. «item_code_1» содержит «Номер задания» и номер последовательности.

Таблица1

JobNumber |Item_code_1 |Scanned| 
12345  |12345_01_01 |Y  | 
12345  |12345_01_02 |Y  | 
12345  |12345_01_03 |Y  | 
1234567 |1234567_01_01 |Y  | 
1234567 |1234567_01_02 |Y  | 
1234567 |1234567_01_03 |Y  | 

Table2 (текущее время = 2016-02-08 16: 52: 32,547)

Scanned_date_time   |Item_Code_1 | 
2016-02-08 16:52:32.547  |12345_01_01 | 
2016-02-08 16:52:32.547  |12345_01_02 | 
2016-02-08 16:52:32.547  |12345_01_03 | 
2016-02-08 **13**:52:32.547 |1234567_01_01| 
2016-02-08 **13**:52:32.547 |1234567_01_02| 
2016-02-08 **13**:52:32.547 |1234567_01_03| 

Смотрите в этом случае:

JobNumber 1234567 item_code_1 сканировали более чем на 2 несколько часов назад.

Я только хочу, чтобы увидеть Номер_задание, если это (по крайней мере 1) item_code_1 сканировали в течение последних двух часов на основе Scanned_date_time

+3

Вы пробовали что-нибудь? Это похоже на предложение 'where'. –

+0

В списке данных нет JobNumber 123456. У вас только 12345 и 1234567. –

+0

Я хотел сказать 1234567 –

ответ

0

Я думаю, вам просто нужно использовать DATEDIFF в пункте WHERE. Вы можете использовать другой блок (мой пример в секундах), если он должен быть более точным.

SELECT * 
FROM table1 t1 
JOIN table2 t2 ON t1.item_code1 = t2.item_code_1 
WHERE DATEDIFF(ss, scanned_date_time, getdate()) < 7200 
+0

Я пробовал это, но я не получаю ожидаемого результата. Я думаю, что это форматирование. вы использовали ss. когда я иду к столу и перехожу в столбец Scanned_date_time, я вижу такие данные. 2016-03-28 21: 33: 43.953 :( –

+0

@BinitPatel ss - это всего лишь секунды. Вы можете изменить его на любой блок, который вы хотите. Ваш формат, похоже, является датой, и это нормально. – SQLChao