mysql:基于时间戳值从第二个表中获取最新的行

csga3l58  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(295)

我有一张table
table1 a_id 作为 PK , ipaddress , create_dt 在这里 ipaddressvarchar , create_dtdatetime ```
a_id ip create_dt
9205 10.10.10.10 2017-01-07 08:03:32
9206 10.10.10.11 2017-01-06 08:03:32
9207 10.10.10.12 2015-01-07 08:03:32

---1000多行
我还有一个mysql表,它有以下列 `id` 作为 `PK` ,  `ip` , 
check_type `check_status` ,  `a_id` 以及 `created_dt` :此处 `a_id` 外键来自 `table1` 以及 `created_dt` 是 `datetime` ```
id      ip             check_type    check_status  a_id    timestamp_val
1       10.10.10.10    check1        FAIL          9205    2017-01-07 10:03:32
2       10.10.10.10    check2        PASS          9205    2017-01-07 10:03:32
3       10.10.10.10    check1        FAIL          9205    2016-11-07 10:03:32
4       10.10.10.10    check2        PASS          9205    2016-11-07 10:03:32
5       10.10.10.11    check1        PASS          9206    2017-01-06 10:03:32
6       10.10.10.11    check2        PASS          9206    2015-01-06 10:03:32

我要所有的行 table1 哪里 date(create_dt) >= '2017-01-07' 以及 table1.a_id = table2.a_id 以及 table2.check1 = 'FAIL' 也, I only want to consider the row from table2 最新的 timestamp_val 因此,从上面的示例中,我的查询应该返回

a_id    ip              create_dt
9205    10.10.10.10     2017-01-07 08:03:32

我写了下面的查询和 want to know how to incorporate the logic to consider the row from table2 with latest 'timestamp_val' ```
SELECT
*
FROM table1 a
INNER JOIN table2 b
ON a.a_id = b.a_id
AND DATE(a.create_dt) >= '2017-01-07'
AND b.check_status = 'FAIL'
AND b.check_type = 'check1'

yks3o0rb

yks3o0rb1#

这个 date() 函数对你没有任何帮助。此外,个人比较通常是在 where 条款。
然后,您可以在 where 条款:

SELECT *  
FROM table1 a INNER JOIN
     table2 b
     ON a.a_id = b.a_id
WHERE a.create_dt >= '2017-01-07' AND
      b.check_status = 'FAIL' AND
      b.check_type = 'check1' AND
      b.timestamp_val = (SELECT MAX(b2.timestamp_val)
                         FROM table2 b2
                         WHERE b2.a_id = b.a_id AND
                               b2.check_status = b.check_status AND
                               b2.check_type = b.check_type
                        );
cgfeq70w

cgfeq70w2#

SELECT *  
FROM table1 a
INNER JOIN table2 b
  ON a.a_id = b.a_id
    AND date(a.create_dt) >= '2017-01-07'
    AND b.check_status = 'FAIL'
    AND b.check_type = 'check1'
ORDER BY timestamp_val desc 
LIMIT 1

相关问题