我不是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
答案 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;