如何根据最近的扫描识别记录

时间:2016-05-05 12:16:33

标签: sql sql-server time greatest-n-per-group

使用SQL Server 2012 Management Studio。

如果在过去2小时内扫描了任何'item_code_1',我需要识别'JobNumber'。 'item_code_1'包含'JobNumber'日#和序号。

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

表2(当前时间= 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小时前扫描过。

我只想查看JobNumber,如果在最近两小时内根据Scanned_date_time扫描了item_code_1(至少1个)

1 个答案:

答案 0 :(得分: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