【转】SQL查询案例:取得分组 TOP-N CREATE TABLE TopnTest ( name VARCHAR(10), --姓名 procDate DATETIME, --处理时间 result INT --成绩 ); INSERT INTO TopnTest VALUES('张三', '2010-10-01 12:00:05', 80); INSERT INTO TopnTest VALUES('张三', '2010
【转】SQL查询案例:取得分组 TOP-N
CREATE TABLE TopnTest (
name VARCHAR(10), --姓名
procDate DATETIME, --处理时间
result INT --成绩
);
INSERT INTO TopnTest VALUES('张三', '2010-10-01 12:00:05', 80);
INSERT INTO TopnTest VALUES('张三', '2010-10-01 12:20:05', 85);
INSERT INTO TopnTest VALUES('张三', '2010-10-02 07:25:15', 79);
INSERT INTO TopnTest VALUES('张三', '2010-10-02 10:30:05', 88);
INSERT INTO TopnTest VALUES('张三', '2010-10-03 15:05:05', 86);
INSERT INTO TopnTest VALUES('李四', '2010-10-01 06:00:05', 60);
INSERT INTO TopnTest VALUES('李四', '2010-10-04 08:00:05', 90);
INSERT INTO TopnTest VALUES('李四', '2010-10-05 10:00:05', 75);
INSERT INTO TopnTest VALUES('李四', '2010-10-08 11:00:05', 88);
INSERT INTO TopnTest VALUES('李四', '2010-10-09 12:00:05', 60);
INSERT INTO TopnTest VALUES('王五', '2010-09-10 08:00:05', 70);
INSERT INTO TopnTest VALUES('王五', '2010-09-14 08:00:05', 80);
INSERT INTO TopnTest VALUES('王五', '2010-09-25 18:00:05', 75);
INSERT INTO TopnTest VALUES('王五', '2010-09-28 18:00:05', 88);
INSERT INTO TopnTest VALUES('王五', '2010-10-09 12:00:05', 70);
要求
取得每个人的最近2次处理时间的详细记录情况。
思路
如果仅仅是一个人的最近2次,那么直接TOP 2或者Rownum
每个人的最近1次,也可以通过SELECT MAX() GROUP BY来实现。
每个人的最近2次,需要自己和自己关联,才能解决了。
实现
SELECT
*
FROM
TopnTest
WHERE
( SELECT
COUNT(1)
FROM
TopnTest subTopnTest
WHERE
TopnTest.name = subTopnTest.name
AND TopnTest.procDate
)
ORDER BY
name, procDate
执行结果
name procDate result
---------- ----------------------- -----------
李四 2010-10-08 11:00:05.000 88
李四 2010-10-09 12:00:05.000 60
王五 2010-09-28 18:00:05.000 88
王五 2010-10-09 12:00:05.000 70
张三 2010-10-02 10:30:05.000 88
张三 2010-10-03 15:05:05.000 86
如果上面的 SQL , 你不怎么看得懂, 那么下面这样的写法,与执行结果,应该能让你更加容易明白一些上面的SQL的处理的原理。
SELECT
name,
procDate,
result,
( SELECT
COUNT(1)
FROM
TopnTest subTopnTest
WHERE
TopnTest.name = subTopnTest.name
AND TopnTest.procDate ) AS [有多少行数据处理时间比当前行大]
FROM
TopnTest
ORDER BY
name, procDate
name procDate result 有多少行数据处理时间比当前行大
---------- ----------------------- ----------- ---------------
李四 2010-10-01 06:00:05.000 60 4
李四 2010-10-04 08:00:05.000 90 3
李四 2010-10-05 10:00:05.000 75 2
李四 2010-10-08 11:00:05.000 88 1
李四 2010-10-09 12:00:05.000 60 0
王五 2010-09-10 08:00:05.000 70 4
王五 2010-09-14 08:00:05.000 80 3
王五 2010-09-25 18:00:05.000 75 2
王五 2010-09-28 18:00:05.000 88 1
王五 2010-10-09 12:00:05.000 70 0
张三 2010-10-01 12:00:05.000 80 4
张三 2010-10-01 12:20:05.000 85 3
张三 2010-10-02 07:25:15.000 79 2
张三 2010-10-02 10:30:05.000 88 1
张三 2010-10-03 15:05:05.000 86 0
(15 行受影响)
,
todropaViewInmysql, "dropviewifexistsview_name;"및 TomodifyAview를 사용하고 "createOrreplaceViewView_NameAsselect ...". "

mysqlViewScaneFeficTicallyINGILIDESIGNPATTORNSLIKEADAPTER, DECIARATOR, FACTORY 및 OBSERVER.1) AdapterPatternAdAptSDataFromDifferentTablesinToAunifiedView.2) Decor

viewsinmysqlarebeneficialforsimplifyingcomplexqueries, envancingsecurity, dataconsistency, andoptimizing promperformance

toeteimpleviewinmysql, usethecreateviewstatement.1) definetheviewwithReateViewview_nameas.2) specifyTesLectStatementToreTrievesiredData.3) usetheViewLikeAtableForqueries.ViewsSimplifyDataAccessAndenHances, ButconSiderFormance

toCreateUserSinmysql, usethecreateuserstatement.1) foralocaluser : createUser'LocalUser '@'localHost'IndifiedBy'SecurePassword '; 2) foremoteUser : createUser'RemoteUser'@'%'reidentifiedBy'StrongPassword ';

mysqlviewshavelimitations : 1) 그들은 upportallsqloperations, datamanipulation throughviewswithjoinsorbqueries를 제한하지 않습니다

적절한 usermanagementInmysqliscrucialforenhancingsecurityandensuringfefficientDatabaseOperation.1) USECREATEUSERTOWDDUSERS,@'localHost'or@'%'.

mysqldoes notimposeahardlimitontriggers, butpracticalfactorsdeteirefectiveuse : 1) ServerConfigurationimpactStriggerManagement; 2) 복잡한 트리거 스케일 스케일 사이드로드; 3) argertableSlowtriggerTriggerPerformance; 4) High ConconcercencyCancaUspriggerContention; 5) m


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

드림위버 CS6
시각적 웹 개발 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경