独特的结果SQL Group By?

时间:2014-01-24 08:20:08

标签: php sql sql-server

我不是MSSQL专业人士,事实上它让我感到沮丧的是“微软方式”做某些事情,但是 嘿,足够的咆哮。 我需要运行一个非常简单的查询,在Mysql中它非常简单但在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

对此有任何帮助将非常感激,我尝试按用户名分组,我得到聚合函数错误。我尝试过Distinct,但没有达到理想的效果。

感谢您的帮助,以下是最终解决方案:

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

WHn rnum = 1

3 个答案:

答案 0 :(得分: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 演示

答案 1 :(得分:0)

您似乎想要最新yearcode的条目。

在纯SQL中我会做这样的事情:

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

答案 2 :(得分:-1)

使用此查询,它将适用于您的情况,

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