【发布时间】:2017-01-23 17:03:38
【问题描述】:
我们有一个 Mariadb 表,其中包含 (users) 中的用户详细信息
我们有第二张表用于审核日期(reviewdates)
| reviewID |USERID |A review date |
| 001 | 123 |2017-01-08 09:02:10 |
etc...
记录每个用户的审查会议日期。
我们有第三张表(userdata),其中包含多种类型的用户数据。字段 id 101 是审核的新目标。字段 id 98 是之前审查的旧目标。
|dataID|Userid |Field ID |FieldValue |UpdatedOn |UpdatedBy|
-------------------------------------------------------------
|0001 |123 | 101 |my new target|2017-01-10|145 |
|0002 |123 | 98 |my old target|2017-01-10|0 |
审核完成后,新目标(字段 ID 101)被复制到旧目标(字段 ID 98)。
任何一个字段都可以随时更新。
每个用户都有多个审核日期。我需要将审核完成后旧字段的第一个值与审核日期之前的最后一个值进行比较,以确保它们已正确复制。由于用户可以更改任一字段,因此必须在完成过程之前和之后进行比较。
所以我加入用户并查看日期
select users.userid,users.username,reviewdates.meetingdate
from companyusers users
join reviewdates on reviewdates.userid = users.userid
这给了我所有用户的所有审查日期
然后我尝试查找 101 字段的最新条目:
select users.userid,users.username, reviewdates.meetingdate, latest101.fielddetails,latest101.updatedon
from users
join reviewdates on reviewdates.userid = users.userid
left join (select userdata.* from userdata u1
where u1.fieldid = 101
and u1.updatedOn = (select max(u2.updatedon)
from userdata u2
where u1.userid = u2.userid
and u2.fieldid = 101)
) as latest101 on (latest101.userid = users.userid)
这也可以,但是当我尝试在每个审核日期 之前找到最近的条目时:
select users.userid,users.username,reviewdates.meetingdate,latest101.fielddetails,latest101.updatedon
from users
join reviewdates on reviewdates.userid = users.userid
left join (select userdata.* from userdata u1
where u1.fieldid = 101
and u1.updatedOn = (select max(u2.updatedon)
from userdata u2
where u1.userid = u2.userid
and u2.fieldid = 101
#date limit
and u2.updatedOn < reviewdates.meetingdate)
) as latest101 on (latest101.userid = users.userid)
我得到一个
"unknown column reviewdates.meetingdate in where clause"
错误。我发现很多语句说我不能在子查询中引用外部连接,但没有一个提供适用于这些日期约束的可能答案。
任何帮助或指点将不胜感激。
【问题讨论】: