如果datetime在48小时内,则从多个表中检查SQL

时间:2014-10-29 12:35:21

标签: mysql sql

我有这个SQL查询:

SELECT t.contact_name as contact_name, t.contact_email as contact_email,
    t.ticketnumber as ticketnumber, t.subject as subject
FROM tickets t JOIN ticket_updates tu ON t.ticketnumber = tu.ticketnumber
WHERE tu.type = 'update' AND
    t.status = 'Awaiting Customer' AND
    tu.datetime <= '2014-10-27 11:18:19'
GROUP BY tu.ticketnumber
order by tu.datetime DESC LIMIT 0,1

tickets中的最后一行超过48小时之前,应显示ticket_updates的记录

如果48小时内status内未添加任何内容,我希望能够自动更改tickets中的ticket_updates

ticket_updates中的

我有3行,其中包含以下日期时间:

2014-11-22 00:00:00
2014-10-26 00:00:00
2014-10-28 00:00:00

所以最后一个是在48小时内,但它在上面的查询中显示的结果是什么时候不应该

2 个答案:

答案 0 :(得分:0)

您正在加入所有机票更新,然后丢弃过去48小时内的更新。您希望使用最新更新作为加入的条件。

尝试用此替换您的联接。

   join (select Max (tu.datetime), tu.ticketnumber from ticket_updates tu
    group by tu.ticketnumber) tu 
    on tu.t.ticketnumber = tu.ticketnumber

答案 1 :(得分:0)

您可以使用内部选择(未测试)来执行此操作:

SELECT t.contact_name as contact_name,
       t.contact_email as contact_email,
       t.ticketnumber as ticketnumber,
       t.subject as subject
FROM tickets t
JOIN ticket_updates tu ON t.ticketnumber = tu.ticketnumber
WHERE t.status = 'Awaiting Customer'
AND t.ticketnumber NOT IN
    (
    -- returns ticketnumbers that have recent updates
    SELECT recentUpdates.ticketnumber
    FROM ticket_updates recentUpdates
    WHERE recentUpdates.type = 'update' AND recentUpdates.datetime => '2014-10-27 11:18:19'
    )
GROUP BY tu.ticketnumber
ORDER BY tu.datetime DESC LIMIT 0,1;