2015年6月29日 星期一

SQL練習:Date

PTT DataBase版 #1IN_QVHL

database:

id   num     date         mark
--  -----  --------     ------------
1   a0001    9/1        訂單內容1
1   a0002    9/15       訂單內容2
2   a0003    9/17       訂單內容3
1   a0004    9/21       訂單內容4
3   a0005    9/24       訂單內容5
2   a0006    9/24       訂單內容6
1   a0007    10/1       訂單內容7

想要每個id 都列出data最新的一筆資料,列出結果如下

id   num     date         mark
--  -----  --------     ------------
1   a0007    10/1       訂單內容7
2   a0006    9/24       訂單內容6
3   a0005    9/24       訂單內容5


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
--建立測試資料表
CREATE TABLE AA
 (
 id varchar(10) NULL,
 num nvarchar(20) NULL,
 n_date date NULL,
 mark varchar(10) NULL,
 )  ON [PRIMARY]

 insert into AA (id,num,n_date,mark) values ('1','a0001','2005-9-1','訂單內容1')
 insert into AA (id,num,n_date,mark) values ('1','a0002','2005-9-15','訂單內容2')
 insert into AA (id,num,n_date,mark) values ('2','a0003','2005-9-17','訂單內容3')
 insert into AA (id,num,n_date,mark) values ('1','a0004','2005-9-21','訂單內容4')
 insert into AA (id,num,n_date,mark) values ('3','a0005','2005-9-24','訂單內容5')
 insert into AA (id,num,n_date,mark) values ('2','a0006','2005-9-24','訂單內容6')
 insert into AA (id,num,n_date,mark) values ('1','a0007','2005-10-1','訂單內容7')

解法

先找出每個ID所對應的最新Date為AAA,inner join 原本的表(AA)

顯示的內容判斷AAA的日期=AA的日期後做排序

1
2
3
4
5
6
select AAA.id,num,AAA.n_date1 as n_date,mark
from (select AA.id,max(AA.n_date) as n_date1
      from AA
      group by id) AS AAA inner join AA ON AAA.id=AA.id
      where AAA.n_date1=AA.n_date
      order by id

沒有留言:

張貼留言