【发布时间】:2018-01-09 17:46:38
【问题描述】:
我有一张桌子 table1 a_id PK, ipaddress, create_dt
这里ipaddress是varchar,create_dt是datetime
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 的外键
而timestamp_val 是TIMESTAMP 字段
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
我已经编写了以下查询,但它并不总是考虑 table2 中具有 max 'timestamp_val'`的行`
我在某些行中也看到了旧的 'timestamp_val'` 的值。
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
);
【问题讨论】:
标签: mysql sql select join inner-join