我有兩個表,表示歷史數據,他們都有一個「src」列,表示該數據主表中的主鍵。我的SQL查詢找到與匹配的主鍵最大值<=日期
例如
的主表將是
tbl_user tbl_email
________ _________
user_pk email_pk
username email
email_pk tstamp
tstamp
的歷史表基本上匹配原始與「SRC」列指示從主表中的源主密鑰記錄。
tbl_user_hist tbl_email_hist
______________ ______________
user_pk email_pk
src_user_pk src_email_pk
username email
email_pk tstamp
tstamp
所以,如果你有主鍵1的電子郵件記錄,你改變從[email protected]電子郵件給[email protected],然後再[email protected]
您tbl_email_hist應該是這樣的
email_pk src_email_pk email tstamp
1 1 [email protected] 2012-01-01 04:06:28
2 1 [email protected] 2012-03-01 04:06:28
3 1 [email protected] 2012-07-01 04:06:28
並讓說,鮑勃原來的用戶名是rsmith,然後又改爲BSMITH然後回到rsmith2。但是這些用戶名稱的更改並不一定與電子郵件更改的時間戳一致。
SO同樣的用戶履歷表看起來像
tbl_user_hist
User_pk src_user_pk username email_pk tstamp
1 1 rsmith 1 2012-01-01 04:08:28
2 1 bsmith 1 2012-02-01 04:01:28
3 1 rsmith2 1 2012-05-01 04:05:28
所以我要的是創建一個查詢,將能夠基於時間戳和相關email_pk記錄來查找正確的電子郵件歷史記錄......這意味着用戶記錄更改時該字段的價值。 因此,在某些方面,我需要找到電子郵件hist表中的記錄,其中src_email_pk與用戶hist表中的email_pk匹配,但該電子郵件歷史記錄的tstamp是最高日期,但仍爲< =用戶表中的時間戳。
在結束我的數據是這樣的
Username email username_timestamp
Rsmith [email protected] 2012-01-01 04:08:28
Bsmith [email protected] 2012-02-01 04:01:28
Rsmith2 [email protected] 2012-05-01 04:05:28
換句話說反映電子郵件列在用戶名的記錄被修改/創建時的價值。
此查詢優化似乎不好解決了這個問題。 – endyourif
它是。但是,只有一個查詢才能做到這一點的好方法是通過改變數據庫模式的非規格化數據,並將tkl_user_hist中的fk存儲到tbl_user_hist。 – 2012-09-24 07:44:41