如何从另一个表中列的日期之间的一个表中获取所有记录

时间:2017-12-05 01:12:56

标签: sql sql-server

我使用sql server,我有一个队列表有一个名为process_date的列,而一个users表有一个名为process_date的列,这两个表之间没有关系。我希望得到所有使用一个队列处理的用户,具体取决于process_date(我有queue_id,我想返回所有使用该队列处理过的用户) 如何编写查询来执行此操作?

更新:process_date是日期时间,因此它与队列和用户不匹配,这就是为什么我需要获取前一个队列的进程日期然后是当前队列然后获取在该日期范围内处理的用户

3 个答案:

答案 0 :(得分:1)

试试这个

SELECT
    *
    FROM Users
        WHERE EXISTS
        (
            SELECT 
                1 
                FROM [Queue] 
                    WHERE [Queue].process_date = Users.process_date 
                    AND [Queue].QueueId = 1
        )

这将返回为queue_id 1处理的所有用户。

注意: 建议不要根据某些日期连接表来检索记录。所以,如果可能的话,你应该向用户添加一个队列ID'表并使用队列表创建外键约束。然后更新每个用户的队列ID,因为时间ca变化(以毫秒为单位)也可以导致错过匹配

答案 1 :(得分:0)

如果没有细节可以处理任何答案,那么同样也会“细节化”。 e.g。

select * from users u 
inner join queue q on u.process_date = q.process_date

或者如果存在某种形式的延迟,那么可能需要一个小的时间范围:例如

select * from users u 
inner join queue q on u.process_date between q.process_date and dateadd(minute,1,q.process_date)

答案 2 :(得分:0)

process_date字段是日期时间,因此它不匹配,这就是我没有加入的原因,我所做的是从队列中选择先前的process_date,然后选择当前队列的process_date,然后选择用户在这两个日期之间使用process_date