比较两个MySQL表之间的最高值

时间:2017-10-27 13:50:24

标签: mysql sql max

我有两个表,search_history和parse_history,它们包含多个相同案例编号的行,其中我上次抓取它时的时间戳不同,而在我上次解析它时在另一个表中。我正在尝试编写一个查询,该查询将比较search_history表中案例编号的最高时间戳值与parse_history表中该案例编号的最高时间戳值。如果search_history中该案例编号的最新条目的时间戳高于parse_history表中该案例编号的最新条目,则返回该时间戳。

我到目前为止看到的所有示例都是使用Max或groupwise max从单个表中获取多个条目的最高值。我无法找到比较两者的任何东西。

下面是我的两个表格,在下面的示例中,我需要返回案例编号4W90B2F,因为最新的search_history条目的时间戳比该案例编号的最新parse_history条目更高。

search_history Table
ID  CaseNumber  TimeStamp
1   4W90B2F 2017-09-30 00:25:33
2   0DB0NGV 2017-09-30 00:15:35
3   4W90B2F 2017-10-05 00:15:44
4   0DB0NGV 2017-10-10 00:53:13
5   4W90B2F 2017-10-20 00:25:34

parse_history Table
ID  CaseNumber  TimeStamp
1   4W90B2F 2017-10-01 00:25:33
2   0DB0NGV 2017-10-02 00:15:35
3   4W90B2F 2017-10-06 00:15:44
4   0DB0NGV 2017-10-11 00:53:13

SQL Fiddle链接到示例 http://sqlfiddle.com/#!9/bc229f

我的尝试到目前为止超时

SELECT sh.*
FROM search_history sh
LEFT JOIN search_history b
ON sh.CaseNumber = b.CaseNumber AND sh.Timestamp < b.Timestamp
INNER JOIN
parse_history as ph
LEFT JOIN parse_history c
ON ph.CaseNumber = c.CaseNumber AND ph.Timestamp < c.Timestamp
WHERE b.CaseNumber IS NULL AND
c.CaseNumber IS NULL
LIMIT 50

2 个答案:

答案 0 :(得分:1)

您可以从查询中进行选择。因此,从两个表中选择每个casenumber的最大时间戳并进行比较。

select 
from (select casenumber, max(timestamp) as maxt from search_history group by casenumber) sh
join (select casenumber, max(timestamp) as maxt from parse_history group by casenumber) ph
  on sh.casenumber = ph.casenumber and sh.maxt > ph.maxt;

答案 1 :(得分:0)

SELECT x.*
  FROM search_history x
  LEFT 
  JOIN parse_history y
    ON y.casenumber = x.casenumber 
   AND y.Timestamp > x.Timestamp
 WHERE y.id IS NULL;