2013-03-25 45 views
0

我不知道這是如何正確地調用,所以我會嘗試用一個例子來解釋一下:從MySQL選擇爲「闖關」起

想象一下,2013年1月1日一天,你開始上學X 。我們進入到一個MySQL表,例如像這樣:現在

user | day  | school 
1 | 1.1.2013 | X 

,在2013年6月1日,你改變學校Y。讓我們進入這樣一個事實:再次

user | day  | school 
1 | 1.1.2013 | X 
1 | 1.6.2013 | Y 

而且,第三次,你切換學校:

user | day  | school 
1 | 1.1.2013 | X 
1 | 1.6.2013 | Y 
1 | 4.3.2015 | Z 

現在,查詢

是你出席1.3什麼學校0.2013?

答案是:X

我們怎樣才能寫出這樣的查詢到MySQL,以得到正確的答案?

注意:如果需要,MySQL表結構可能與我提供的不同。
注2:這是不是作業作業。這是我所面臨的真實情況,但我還沒有創建我的表格,因爲我不確定迄今爲止最好的解決方案。

回答

0

爲了使日期格式正確地存儲在日期格式中 - yyyy-mm-dd,所以您可以對其進行分類。然後運行它。它會在所選日期的過去時間(實際上僅限於最近一次,因爲LIMIT 1),當用戶從最近一次開始簽約學校時。

SELECT * FROM {table_name} WHERE day <= '2013-03-01' ORDER BY day DESC LIMIT 1 

你的情況,你會得到學校因爲2013-01-01

編輯:

的情況下,你的expediture表包含日期(日期格式),您可以使用子查詢。

SELECT e.*, (SELECT school FROM {table_name} WHERE day <= e.date ORDER BY day DESC LIMIT 1) AS school_attended 
FROM expenditures e; 

如果您提供expeditures表格方案,我可能會提供更好的方法。

+0

聽起來不錯,但是如果您需要將其加入到不同的表格中,例如您的支出表,那麼情況如何呢?你每天都會得到一張食物**的支付表**,並且每天都需要您左右參加學校表以瞭解您當天參加哪個學校。 – 2013-03-25 15:04:47

+0

讓我糾正我的答案。它不符合你現在需要的方式。 – 2013-03-25 15:09:13