2012-04-30 26 views
0

我是一個總SQL初學者;抱歉。我可以在一個sta sta中選擇它嗎?

我有一個表

mysql> describe activity; 
+--------------+---------+------+-----+---------+-------+ 
| Field  | Type | Null | Key | Default | Extra | 
+--------------+---------+------+-----+---------+-------+ 
| user   | text | NO |  | NULL |  | 
| time_stamp | int(11) | NO |  | NULL |  | 
| activity  | text | NO |  | NULL |  | 
| item   | int  | NO |  | NULL |  | 
+--------------+---------+------+-----+---------+-------+ 

通常activity是一個兩步驟的過程; 1)「check out」和2「use」

item如果沒有使用,則不能再次檢出。

現在我想找到任何情況下,項目被檢出但未使用。

被愚蠢的,我會用兩個選擇,一個用於檢查出&一個使用,在相同的項目,然後比較時間戳。

是否有一個SELECT語句可以幫助我選擇已簽出但未使用的項目?

棘手與multipel簽出的可能性。或者我應該只是代碼

loop over activity, form oldest until newset 
    if find a checkout and there is no newer used time then i have a hit 
+3

*該項目已被使用後會發生什麼?有沒有「入住」活動?如果沒有,那麼已經「簽出」然後「使用」的項目和已經「使用」然後「簽出」的項目之間有什麼區別? – eggyal

+1

你想根據日期範圍搜索每個活動,這是否正確? – sree

+0

@eggyal這是alwyas退房,然後使用。如果已經簽出進一步的嘗試將被拒絕。所以,我只是尋找檢查出來,但沒有使用(misisng,推測被盜) – Mawg

回答

2

你可以得到每個結賬的最後日期或使用,然後比較它們每件:

SELECT MAX(IF(activity='check out', time_stamp, NULL)) AS last_co, 
MAX(IF(activity='use', time_stamp, NULL)) AS last_use 
FROM activity 
GROUP BY item 
HAVING NOT(last_use >= last_co); 

NOT(last_use >= last_co)寫,因爲如何NULL比較行爲作品那樣:last_use <如果last_use爲空,last_co將不起作用。

沒有適當的索引,這個查詢雖然不會很好執行。另外,您可能希望使用WHERE條件限制查詢。

+1

選擇* from activity where activity ==「check out」; 你的問題不清楚,但我想這可能有幫助。 – KBN

+0

@JAck。 1謝謝,這似乎是我正在尋找的。我會檢查出來 – Mawg

+0

@xFortyFour +1。如果不清楚,請聯繫。你能告訴我我將如何澄清?謝謝 – Mawg