SQL每個月份的發生額都比101科目多的科目


請用SQL語句實現:從TestDB數據表中查詢出所有月份的發生額都比101科目相應月份的發生額高的科目。請注意:TestDB中有很多科目,都有1-12月份的發生額。
                  AccID:科目代碼,Occmonth:發生額月份,DebitOccur:發生額。
                  數據庫名:JcyAudit,數據集:Select * from TestDB
                  准備數據的sql代碼:

 drop table if exists TestDB;
                  create table TestDB(id int primary key auto_increment,AccID 
                  varchar(20), Occmonth date, DebitOccur bigint);
                  insert into TestDB values 
                  (null,'101','1988-1-1',100),
                  (null,'101','1988-2-1',110),
                  (null,'101','1988-3-1',120),
                  (null,'101','1988-4-1',100),
                  (null,'101','1988-5-1',100),
                  (null,'101','1988-6-1',100),
                  (null,'101','1988-7-1',100),
                  (null,'101','1988-8-1',100);
                  --復制上面的數據,故意把第一個月份的發生額數字改小一點
                  insert into TestDB values 
                  (null,'102','1988-1-1',90),
                  (null,'102','1988-2-1',110),
                  (null,'102','1988-3-1',120),
                  (null,'102','1988-4-1',100),
                  (null,'102','1988-5-1',100),
                  (null,'102','1988-6-1',100),
                  (null,'102','1988-7-1',100),
                  (null,'102','1988-8-1',100);
                  --復制最上面的數據,故意把所有發生額數字改大一點
                  insert into TestDB values 
                  (null,'103','1988-1-1',150),
                  (null,'103','1988-2-1',160),
                  (null,'103','1988-3-1',180),
                  (null,'103','1988-4-1',120),
                  (null,'103','1988-5-1',120),
                  (null,'103','1988-6-1',120),
                  (null,'103','1988-7-1',120),
                  (null,'103','1988-8-1',120);
                  --復制最上面的數據,故意把所有發生額數字改大一點
                  insert into TestDB values 
                  (null,'104','1988-1-1',130),
                  (null,'104','1988-2-1',130),
                  (null,'104','1988-3-1',140),
                  (null,'104','1988-4-1',150),
                  (null,'104','1988-5-1',160),
                  (null,'104','1988-6-1',170),
                  (null,'104','1988-7-1',180),
                  (null,'104','1988-8-1',140);
                  --復制最上面的數據,故意把第二個月份的發生額數字改小一點
                  insert into TestDB values 
                  (null,'105','1988-1-1',100),
                  (null,'105','1988-2-1',80),
                  (null,'105','1988-3-1',120),
                  (null,'105','1988-4-1',100),
                  (null,'105','1988-5-1',100),
                  (null,'105','1988-6-1',100),
                  (null,'105','1988-7-1',100),
                  (null,'105','1988-8-1',100);
               

答案:

select distinct AccID from TestDB 
                  where AccID not in 
                  (select TestDB.AccIDfrom TestDB,
                  (select * from TestDB where AccID='101') as db101 
                  where TestDB.Occmonth=db101.Occmonth and 
                  TestDB.DebitOccur<=db101.DebitOccur
                  );

 


                 
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM