MySQL WHERE 最近的行列在加入的特定日期之后 table?
MySQL WHERE most recent row column is after a specific date in a joined table?
我正在尝试缩小查询结果集的范围,我可以通过检查审计来减少这一点的一种方法 table foo_status,当特定列 barStatus
已设置为“实时”。
富table
+--------+----------+-----------+---------------------+
| id | status | barStatus | created |
+--------+----------+-----------+---------------------+
| 120534 | LIVE | LIVE | 13/02/2021 13:21:04 |
+--------+----------+-----------+---------------------+
基本上基数是(一个 Foo -- 有很多 --> Foo 状态更新)
table 记录 foo 状态随时间变化的时间,例如
+------+-------------------+-------------------+-------+------------------+------------+--------+
|id |createdOn |modifiedOn |version|status |barStatus |foo_id |
+------+-------------------+-------------------+-------+------------------+------------+--------+
|213423|2018-09-02 03:21:56|2018-09-02 03:21:56|0 |ACTIVATED |UNSURE |120534 |
|213424|2018-09-02 03:30:22|2018-09-02 03:30:22|0 |REGISTERED |UNSURE |120534 |
|213425|2018-09-02 03:30:22|2018-09-02 03:30:22|0 |AWAITING_INTERVIEW|UNSURE |120534 |
|215396|2018-09-07 10:16:58|2018-09-07 10:16:58|0 |INVITED_TO_JOIN |UNSURE |120534 |
|215601|2018-09-07 21:09:13|2018-09-07 21:09:13|0 |INVITED_TO_JOIN |DBS_RECEIVED|120534 |
|215603|2018-09-07 21:17:12|2018-09-07 21:17:12|0 |READY_FOR_LIVE |DBS_RECEIVED|120534 |
|218345|2018-09-14 14:42:22|2018-09-14 14:42:22|0 |READY_FOR_LIVE |LIVE |120534 |
|218351|2021-02-14 14:45:21|2018-09-14 14:45:21|0 |LIVE |LIVE |120534 |
+------+-------------------+-------------------+-------+------------------+------------+--------+
我想限制当 foo 在 5 天内 barStatus
变成 LIVE
时的结果集
然而我当前的查询returns没有结果
select count(foo.id)
from foos foo
left join foo_status_updates fsu on fsu.foo_id = foo.id
where fs.id = 1
and (foo.currentlyUnavailable IS FALSE)
and (foo.status in ('READY_FOR_LIVE', 'LIVE'))
and foo.barStatus = 'LIVE'
and (SELECT createdOn
FROM foo_status_updates fsu
WHERE foo_id = foo.id
AND barStatus = 'LIVE'
ORDER BY createdOn
LIMIT 1) > DATE_SUB(NOW(), INTERVAL 5 DAY)
总而言之,我只想取回最近(5 天内)barStatus
设置为 LIVE
的 Foo 记录
我是否需要 select JOIN
子句中的最新列?
在我看来 AND (SELECT
位应该是
AND foo.id in (
SELECT foo_id
FROM foo_status_updates
WHERE createdOn > DATE_SUB(NOW(), INTERVAL 5 DAY)
AND barStatus = 'Live'
)
我正在尝试缩小查询结果集的范围,我可以通过检查审计来减少这一点的一种方法 table foo_status,当特定列 barStatus
已设置为“实时”。
富table
+--------+----------+-----------+---------------------+
| id | status | barStatus | created |
+--------+----------+-----------+---------------------+
| 120534 | LIVE | LIVE | 13/02/2021 13:21:04 |
+--------+----------+-----------+---------------------+
基本上基数是(一个 Foo -- 有很多 --> Foo 状态更新)
table 记录 foo 状态随时间变化的时间,例如
+------+-------------------+-------------------+-------+------------------+------------+--------+
|id |createdOn |modifiedOn |version|status |barStatus |foo_id |
+------+-------------------+-------------------+-------+------------------+------------+--------+
|213423|2018-09-02 03:21:56|2018-09-02 03:21:56|0 |ACTIVATED |UNSURE |120534 |
|213424|2018-09-02 03:30:22|2018-09-02 03:30:22|0 |REGISTERED |UNSURE |120534 |
|213425|2018-09-02 03:30:22|2018-09-02 03:30:22|0 |AWAITING_INTERVIEW|UNSURE |120534 |
|215396|2018-09-07 10:16:58|2018-09-07 10:16:58|0 |INVITED_TO_JOIN |UNSURE |120534 |
|215601|2018-09-07 21:09:13|2018-09-07 21:09:13|0 |INVITED_TO_JOIN |DBS_RECEIVED|120534 |
|215603|2018-09-07 21:17:12|2018-09-07 21:17:12|0 |READY_FOR_LIVE |DBS_RECEIVED|120534 |
|218345|2018-09-14 14:42:22|2018-09-14 14:42:22|0 |READY_FOR_LIVE |LIVE |120534 |
|218351|2021-02-14 14:45:21|2018-09-14 14:45:21|0 |LIVE |LIVE |120534 |
+------+-------------------+-------------------+-------+------------------+------------+--------+
我想限制当 foo 在 5 天内 barStatus
变成 LIVE
时的结果集
然而我当前的查询returns没有结果
select count(foo.id)
from foos foo
left join foo_status_updates fsu on fsu.foo_id = foo.id
where fs.id = 1
and (foo.currentlyUnavailable IS FALSE)
and (foo.status in ('READY_FOR_LIVE', 'LIVE'))
and foo.barStatus = 'LIVE'
and (SELECT createdOn
FROM foo_status_updates fsu
WHERE foo_id = foo.id
AND barStatus = 'LIVE'
ORDER BY createdOn
LIMIT 1) > DATE_SUB(NOW(), INTERVAL 5 DAY)
总而言之,我只想取回最近(5 天内)barStatus
设置为 LIVE
的 Foo 记录
我是否需要 select JOIN
子句中的最新列?
在我看来 AND (SELECT
位应该是
AND foo.id in (
SELECT foo_id
FROM foo_status_updates
WHERE createdOn > DATE_SUB(NOW(), INTERVAL 5 DAY)
AND barStatus = 'Live'
)