我有一個人員表,一個單元表和一個健康表(如下所述)。基本上在我的工作中,我們必須檢查人員,如果他們還沒有被看到兩天,我們去尋找他們...我想要的是能夠選擇健康表中的所有記錄是兩天以上,但只有最新的(因爲可能會有多個條目每人每天,這是我想要它,因爲在wellness.username
字段,你可以告訴誰看到了誰,什麼時候)。MySQL只選擇2天以前的最新記錄(時間戳)
People
+------------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| fname | varchar(32) | NO | | NULL | |
| lname | varchar(32) | NO | | NULL | |
| dob | date | NO | | 0000-00-00 | |
| license_no | varchar(24) | NO | | NULL | |
| date_added | timestamp | NO | | CURRENT_TIMESTAMP | |
| status | varchar(8) | NO | | Allow | |
+------------+-------------+------+-----+-------------------+----------------+
Units
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| number | varchar(3) | NO | | NULL | |
| resident | int(11) | NO | MUL | NULL | |
| type | varchar(16) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
+--------------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+-------------------+----------------+
| wellness_id | int(11) | NO | PRI | NULL | auto_increment |
| people_id | int(11) | NO | | NULL | |
| time_checked | timestamp | NO | | CURRENT_TIMESTAMP | |
| check_type | varchar(1) | NO | | NULL | |
| username | varchar(16) | NO | | jmd9qs | |
+--------------+-------------+------+-----+-------------------+----------------+
的units
表是醜陋的,我知道,但它很快就會改變;因爲它,resident
引用people.id
。
這裏是我的最低工作實例,只給了我,即使有多個people
在wellness
有超過2天的一個time_checked
行的一個結果。的一個結果我得到更像是4-1/2日齡....
select w.wellness_id, p.id, p.lname, p.fname, u.number, u.type,
w.time_checked, w.check_type, w.username
from people p
left join units u on p.id = u.resident
right join wellness w on p.id = w.people_id
WHERE w.time_checked <= DATE_ADD(CURDATE(), INTERVAL -2 DAY)
order by w.time_checked asc;
我試圖讓那些超過兩天的最新的記錄,但只有每people
是1在wellness
表中。我加入了其他所有內容,因爲我需要它來顯示使用PHP的記錄。
對不起,我的問題相當混亂,希望已經夠清楚了!
編輯 - 樣本數據:
+------+------+--------+---------------------+------------+----------+
| w_id | id | number | time_checked | check_type | username |
+------+------+--------+---------------------+------------+----------+
| 100 | 2 | 425 | 2013-08-23 21:03:00 | s | jmd9qs |
| 101 | 2 | 425 | 2013-08-25 05:41:01 | s | jmd9qs |
| 91 | 2 | 425 | 2013-08-20 19:52:23 | s | jmd9qs |
| 83 | 4 | 416 | 2013-08-23 20:12:29 | s | jmd9qs |
| 76 | 5 | 408 | 2013-08-23 20:11:21 | s | jmd9qs |
| 62 | 6 | 327 | 2013-08-23 20:06:13 | s | jmd9qs |
| 18 | 7 | 204 | 2013-08-23 19:43:58 | s | jmd9qs |
| 31 | 8 | 219 | 2013-08-23 19:51:11 | s | jmd9qs |
| 97 | 9 | 432 | 2013-08-23 20:16:39 | o | jmd9qs |
| 44 | 10 | 309 | 2013-08-23 19:55:45 | s | jmd9qs |
+------+------+--------+---------------------+------------+----------+
你能提供的樣本數據,並在此基礎上所需的輸出? – peterm
我無法真正向您展示示例數據,因爲它的性質,但我真正需要返回的是people.id,people.fname,people.lname和unit.number匹配我的標準是a)沒有被看到2天,b)每個人只有一個結果 – jmd9qs
它可能是假的數據,沒有人對真正的數據感興趣。但需要更好地理解您的要求,其次要測試查詢。否則,我們需要花時間和自己來彌補。 – peterm