根据活动日期显示mysql表上的特定字段
假设我有3个表:根据活动日期显示mysql表上的特定字段,mysql,sql,Mysql,Sql,假设我有3个表: A) Table UsrHeader ----------------- UsrID | UsrName ----------------- 1 | Abc 2 | Bcd B) Table UsrDetail ------------------------------- UsrID | UsrLoc | Date ------------------------------- 1
A) Table UsrHeader
-----------------
UsrID | UsrName
-----------------
1 | Abc
2 | Bcd
B) Table UsrDetail
-------------------------------
UsrID | UsrLoc | Date
-------------------------------
1 | LocA | 10 Aug 2012
1 | LocB | 15 Aug 2012
2 | LocA | 10 Aug 2012
C) Table Trx
-----------------------------
TrxID | TrxDate | UsrID
-----------------------------
1 | 10 Aug 2012 | 1
2 | 16 Aug 2012 | 1
3 | 11 Aug 2012 | 2
我想做的是将表格显示为:
---------------------------------------
TrxID | TrxDate | UsrID | UsrLoc
---------------------------------------
1 | 10 Aug 2012 | 1 | LocA
2 | 16 Aug 2012 | 1 | LocB
3 | 11 Aug 2012 | 2 | LocA
请注意,只有一个用户,但位置不同。这基于指定日期的用户已移动到其他位置的USRDeail表。因此,它应该在每笔交易中显示该日期的用户特定位置
我尝试过此代码,但没有成功:
SELECT trx.TrxID, trx.TrxDate, trx.UsrID, User.UsrName, User.UsrLoc
FROM trx
INNER JOIN
( SELECT UsrHeader.UsrID, UsrHeader.UsrName, UserDetail.UsrLoc
FROM UsrHeader
INNER JOIN
( SELECT UsrDetail.UsrID, UsrDetail.UsrLoc, UsrDetail.Date
FROM UsrDetail
) AS UserDetail ON UserDetail.UsrID = UsrHeader.UsrID
) AS User ON User.UsrID = trx.UsrID
AND trx.TrxDate >= User.Date
怎么做?谢谢。请使用以下命令:
SELECT trx.TrxID, trx.TrxDate, uh.UsrName, ud.UsrLoc
FROM trx
INNER JOIN UsrDetail ud ON (trx.UsrId = ud.UsrId)
INNER JOIN UsrHeader uh ON (trx.UsrId = uh.UsrId)
WHERE ud.Date = (SELECT MAX(t.Date)
FROM UsrDetail t
WHERE t.UsrId = trx.UsrId
AND t.Date <= trx.TrxDate)
下面是一个SQL小提琴。使用以下命令:
SELECT trx.TrxID, trx.TrxDate, uh.UsrName, ud.UsrLoc
FROM trx
INNER JOIN UsrDetail ud ON (trx.UsrId = ud.UsrId)
INNER JOIN UsrHeader uh ON (trx.UsrId = uh.UsrId)
WHERE ud.Date = (SELECT MAX(t.Date)
FROM UsrDetail t
WHERE t.UsrId = trx.UsrId
AND t.Date <= trx.TrxDate)
这里有一个SQL小提琴