2014-01-24 57 views
0

我不是MSSQL專業版,其實它讓我感到「微軟之道」做了一些事情,但是嘿,足以咆哮。 我有需要運行一個非常簡單的查詢,在Mysql中它非常簡單,但在MSSQL中我無法實現我想要的。不同的結果MSSQL小組由?

我有1個表,表中包含用戶名和密碼,並在一年代碼,然而,一些賬戶被複制,我需要能夠拉最新結果爲所有學生

username__________password____________yearcode 
112211------------dgsvdhsa------------11/12 
112211------------dsgvrrhb------------12/13 
234543------------36%Sldof------------11/12 
344321------------sDDdesSs------------11/12 
234543------------plOKjwDS------------12/13 

所需的輸出

username__________password____________yearcode 
112211------------dsgvrrhb------------12/13 
344321------------sDDdesSs------------11/12 
234543------------plOKjwDS------------12/13 

任何幫助瓦特ith這將不勝感激,我已經嘗試按用戶名進行分組,並且出現聚合函數錯誤。我嘗試了獨特的,我沒有得到期望的結果。

感謝你的幫助,下面是最終的解決方案:

SELECT * 
FROM 
(
    SELECT t.*, 
    ROW_NUMBER() OVER (PARTITION BY PERSON_CODE ORDER BY SessionCode DESC) rnum 
    FROM table.dbo.Students t 
    WHERE t.FORENAME LIKE '%$user%' OR t.SURNAME LIKE '%$user%' OR t.PERSON_CODE LIKE '%$user%' 
) q 

WHERE RNUM = 1

+1

後,你已經嘗試了查詢。這將幫助人們幫助你。 –

回答

1

你能做到這樣

SELECT username, password, yearcode 
    FROM 
(
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY username ORDER BY yearcode DESC) rnum 
    FROM table1 t 
) q 
WHERE rnum = 1 
ORDER BY username; 

或一個老派的方式無開窗功能

SELECT t.username, t.password, t.yearcode 
    FROM 
(
    SELECT username, MAX(yearcode) yearcode 
    FROM table1 
    GROUP BY username 
) q JOIN table1 t 
    ON q.username = t.username 
    AND q.yearcode = t.yearcode 
ORDER BY username; 

輸出:

 
| USERNAME | PASSWORD | YEARCODE | 
|----------|----------|----------| 
| 112211 | dsgvrrhb | 12/13 | 
| 234543 | plOKjwDS | 12/13 | 
| 344321 | sDDdesSs | 11/12 | 

這裏是一個SQLFiddle演示

+0

這是完美的,我將編輯我的帖子,以顯示我的where子句的完整查詢。但你的偉大。我不明白爲什麼你會選擇和再次選擇。你能解釋一下嗎? - 作爲一個PHP開發人員我習慣於做所有的數據集處理PHP端而不是服務器端。 –

+1

在內部選擇中,我們獲得按年份代碼降序排列的每個用戶名的行號。對於每個用戶的所有最新記錄,這種方式將得到一個行號= 1。然後在外部選擇中,我們過濾掉所有不等於1的記錄,只留下最新的記錄。分析窗口功能非常快速且功能強大。 – peterm

+0

謝謝你,現在對我更有意義! –

-1

使用此查詢時,它會爲你的條件下工作,

SELECT DISTINCT(username),password,yearcode 
FROM Table1 t; 
+0

你試過了嗎? – peterm

+0

它將返回所有行。 –

+0

我確定我已經嘗試過,並沒有返回所需的結果。但Peterm設法給解決方案謝謝,雖然Shivam。 –

0

它看起來像你想了解最新yearcode項。

在普通的SQL我會做這樣的事情:

select * from table t1 where yearcode = 
    (select max(yearcode) from table t2 where t1.username = t2.username);