2012-07-24 19 views
2

每個人。我在這裏是新來的,我有一個關於SQL的問題,我似乎認爲它可能很容易在SQL中完成,但我沒有想法,我可以使用一些幫助解決我的問題。使用之間和多個發生的SQL的問題

所以我有一個表(SQL也在這裏http://www.sqlfiddle.com/#!2/b9a37/1/0

隨着多次出現的每個人,不同的ID與自動遞增,我有3個字段,「類別」,「In」和「Out」的

我試圖實現的是一種讓我知道何時桌子上的某些用戶屬於使用「In」和「Out」作爲限制的系統的方式。

  • 用戶A - A類 - IN 2002 OUT 2010
  • 用戶A - B類 - IN 2011 OUT 9999
  • 用戶B - B類 - IN 2002 OUT 2010

在上面的例子中,我想知道誰在2010年屬於系統:

因此對於用戶A,他勒FT A類在2010年,但在2011年2011範疇加盟,所以他應該是在2010年用戶與A類

用戶B,他應該不屬於這個系統,因爲有一個爲2010+

在沒有新的條目最終我特林有以下輸出2010

  • 史密斯A類
  • 巴勃羅A類

我沒有實現我的結果希望,例如

SELECT * from users 
WHERE (users.In<=2010 and users.Out=2010) 

輸出

  • 史密斯A類在2002年走出2010
  • 羅傑·B類在2002年走出2010
  • 米勒B類在2008年走出2010
  • 巴勃羅範疇A 2002年出局2010

但是羅格呃和米勒在2010年離開了這個系統,所以他們不應該成爲2010年的成員,史密斯和巴勃羅在2010年改變了他們的類別,所以他們應該在輸出中表現出來。

一些注意事項: 不要問我爲什麼這個解決方案是這樣開發的,我只是偶然發現並試圖解決這個問題。 我正在考慮在php中做一個函數,根據我想要的數據過濾數據,因爲我沒有想法來解決這個問題。 如果您找到了比我在這裏看到的更好的實施方法,請成爲我的客人,我願意接受新的想法。

在此先感謝。

最後注意: 也許使用http://www.sqlfiddle.com/#!2/b9a37/1/0並試圖找到所需的輸出將幫助你。

+0

用戶之間的類別記錄之間是否有空隙? – 2012-07-24 15:37:04

+2

我不知道SQLFiddle存在。哇,這是一個令人印象深刻的網站。 – 2012-07-24 15:37:22

+0

是的,類別記錄之間可能存在差距。用戶可以是2000年到2005年的成員,然後在2006年晚些時候再加入。通過使用9999,我說用戶仍然是最後一個類別,以避免每年手動更新表。 – user1549097 2012-07-24 15:41:45

回答

1

給這一個鏡頭:

select Name, Category 
from users 
where `In` <= 2010 and (
     `Out` > 2010 or name in (
      select name 
      from users 
      where `In` = 2011 
      ) 
     ) 

SQL Fiddle Example

+0

OMG,這是exaclty我在找什麼,我用之間和其他參數和未能在初始選擇內使用select。 – user1549097 2012-07-24 15:46:11

+0

剛回來說謝謝......因爲我忘了:) – user1549097 2012-07-25 08:55:29

0

這似乎工作:

select * from users a, users b where a.name = b.name and a.out + 1 = b.out 

然而,將無法正常工作,如果多個用戶具有相同的姓氏並且它假設去年比一年少一次。

+1

感謝您的幫助,但RedFilter指出我的解決方案。 – user1549097 2012-07-25 08:59:04