22,210
社区成员
发帖
与我相关
我的任务
分享
if object_id('flight') is not null
drop table flight
create table flight (ID int,日期 char(10),出发城市 nvarchar(30), 到达城市 nvarchar(30), 价格 dec(18,2))
insert into flight
select 2,'2009-11-20','SZX','WUH',740 union all
select 3,'2009-11-21','SZX','WUH',690 union all
select 4,'2009-11-22','SZX','WUH',190 union all
select 5,'2009-11-23','SZX','WUH',540 union all
select 6,'2009-11-24','SZX','WUH',440 union all
select 7,'2009-11-25','SZX','WUH',340 union all
select 8,'2009-11-26','SZX','WUH',390 union all
select 9,'2009-11-20','SZX','SHA',1190 union all
select 10,'2009-11-21','SZX','SHA',1120 union all
select 11,'2009-11-22','SZX','SHA',840 union all
select 12,'2009-11-23','SZX','SHA',840 union all
select 13,'2009-11-24','SZX','SHA',700 union all
select 14,'2009-11-25','SZX','SHA',700 union all
select 15,'2009-11-26','SZX','SHA',630 union all
select 16,'2009-11-20','SZX','PEK',1750 union all
select 17,'2009-11-21','SZX','PEK',1750 union all
select 18,'2009-11-22','SZX','PEK',1750 union all
select 19,'2009-11-23','SZX','PEK',1750 union all
select 20,'2009-11-24','SZX','PEK',1750 union all
select 21,'2009-11-25','SZX','PEK',1750 union all
select 22,'2009-11-26','SZX','PEK',1400 union all
select 23,'2009-11-20','SZX','TSN',1850 union all
select 24,'2009-11-21','SZX','TSN',1850 union all
select 25,'2009-11-22','SZX','TSN',1390 union all
select 26,'2009-11-23','SZX','TSN',1110 union all
select 27,'2009-11-24','SZX','TSN',1110 union all
select 28,'2009-11-25','SZX','TSN',1110 union all
select 29,'2009-11-26','SZX','TSN',830 union all
select 30,'2009-11-20','SZX','CKG',960 union all
select 31,'2009-11-21','SZX','CKG',960 union all
select 32,'2009-11-22','SZX','CKG',960 union all
select 33,'2009-11-23','SZX','CKG',960 union all
select 34,'2009-11-24','SZX','CKG',580 union all
select 35,'2009-11-25','SZX','CKG',580 union all
select 36,'2009-11-26','SZX','CKG',580 union all
select 37,'2009-11-20','SZX','CTU',1060 union all
select 38,'2009-11-21','SZX','CTU',1060 union all
select 39,'2009-11-22','SZX','CTU',1060 union all
select 40,'2009-11-23','SZX','CTU',1060 union all
select 41,'2009-11-24','SZX','CTU',1060 union all
select 42,'2009-11-25','SZX','CTU',850 union all
select 43,'2009-11-26','SZX','CTU',850 union all
select 44,'2009-11-20','SZX','CSX',400 union all
select 45,'2009-11-21','SZX','CSX',440 union all
select 46,'2009-11-22','SZX','CSX',370 union all
select 47,'2009-11-23','SZX','CSX',400 union all
select 48,'2009-11-24','SZX','CSX',370 union all
select 49,'2009-11-25','SZX','CSX',370 union all
select 50,'2009-11-26','SZX','CSX',370 union all
select 49,'2009-11-25','PEK','WUH',650 union all
select 50,'2009-11-26','PEK','WUH',580 union all
select 49,'2009-11-25','PEK','CTU',650 union all
select 50,'2009-11-26','PEK','SZX',880
select * from flight t
where id in(select top 3 id from flight where t.出发城市+t.到达城市 = 出发城市+到达城市 order by 价格,日期 desc )
--结果
4 2009-11-22 SZX WUH 190.00
7 2009-11-25 SZX WUH 340.00
8 2009-11-26 SZX WUH 390.00
13 2009-11-24 SZX SHA 700.00
14 2009-11-25 SZX SHA 700.00
15 2009-11-26 SZX SHA 630.00
20 2009-11-24 SZX PEK 1750.00
21 2009-11-25 SZX PEK 1750.00
22 2009-11-26 SZX PEK 1400.00
27 2009-11-24 SZX TSN 1110.00
28 2009-11-25 SZX TSN 1110.00
29 2009-11-26 SZX TSN 830.00
34 2009-11-24 SZX CKG 580.00
35 2009-11-25 SZX CKG 580.00
36 2009-11-26 SZX CKG 580.00
41 2009-11-24 SZX CTU 1060.00
42 2009-11-25 SZX CTU 850.00
43 2009-11-26 SZX CTU 850.00
48 2009-11-24 SZX CSX 370.00
49 2009-11-25 SZX CSX 370.00
50 2009-11-26 SZX CSX 370.00
49 2009-11-25 PEK WUH 650.00
50 2009-11-26 PEK WUH 580.00
49 2009-11-25 PEK CTU 650.00
50 2009-11-26 PEK SZX 880.00
--> Test data : @t
declare @t table ([ID] int,[日期] datetime,[出城市] varchar(3),[到城市] varchar(3),[价格] int)
insert into @t
select 2,'2009-11-20','SZX','WUH',740 union all
select 3,'2009-11-21','SZX','WUH',690 union all
select 4,'2009-11-22','SZX','WUH',690 union all
select 5,'2009-11-23','SZX','WUH',540 union all
select 6,'2009-11-24','SZX','WUH',440 union all
select 7,'2009-11-25','SZX','WUH',440 union all
select 8,'2009-11-26','SZX','WUH',390 union all
select 9,'2009-11-20','SZX','SHA',1190 union all
select 10,'2009-11-21','SZX','SHA',1120 union all
select 11,'2009-11-22','SZX','SHA',840 union all
select 12,'2009-11-23','SZX','SHA',840 union all
select 13,'2009-11-24','SZX','SHA',700 union all
select 14,'2009-11-25','SZX','SHA',700 union all
select 15,'2009-11-26','SZX','SHA',630 union all
select 16,'2009-11-20','SZX','PEK',1750 union all
select 17,'2009-11-21','SZX','PEK',1750 union all
select 18,'2009-11-22','SZX','PEK',1750 union all
select 19,'2009-11-23','SZX','PEK',1750 union all
select 20,'2009-11-24','SZX','PEK',1750 union all
select 21,'2009-11-25','SZX','PEK',1750 union all
select 22,'2009-11-26','SZX','PEK',1400 union all
select 23,'2009-11-20','SZX','TSN',1850 union all
select 24,'2009-11-21','SZX','TSN',1850 union all
select 25,'2009-11-22','SZX','TSN',1390 union all
select 26,'2009-11-23','SZX','TSN',1110 union all
select 27,'2009-11-24','SZX','TSN',1110 union all
select 28,'2009-11-25','SZX','TSN',1110 union all
select 29,'2009-11-26','SZX','TSN',830 union all
select 30,'2009-11-20','SZX','CKG',960 union all
select 31,'2009-11-21','SZX','CKG',960 union all
select 32,'2009-11-22','SZX','CKG',960 union all
select 33,'2009-11-23','SZX','CKG',960 union all
select 34,'2009-11-24','SZX','CKG',580 union all
select 35,'2009-11-25','SZX','CKG',580 union all
select 36,'2009-11-26','SZX','CKG',580 union all
select 37,'2009-11-20','SZX','CTU',1060 union all
select 38,'2009-11-21','SZX','CTU',1060 union all
select 39,'2009-11-22','SZX','CTU',1060 union all
select 40,'2009-11-23','SZX','CTU',1060 union all
select 41,'2009-11-24','SZX','CTU',1060 union all
select 42,'2009-11-25','SZX','CTU',850 union all
select 43,'2009-11-26','SZX','CTU',850 union all
select 44,'2009-11-20','SZX','CSX',400 union all
select 45,'2009-11-21','SZX','CSX',440 union all
select 46,'2009-11-22','SZX','CSX',370 union all
select 47,'2009-11-23','SZX','CSX',400 union all
select 48,'2009-11-24','SZX','CSX',370 union all
select 49,'2009-11-25','SZX','CSX',370 union all
select 50,'2009-11-26','SZX','CSX',370 union all
select 49,'2009-11-25','PEK','WUH',650 union all
select 50,'2009-11-26','PEK','WUH',580 union all
select 49,'2009-11-25','PEK','CTU',650 union all
select 50,'2009-11-26','PEK','SZX',880
declare @startDay datetime,@endDay datetime
select @startDay='2009-11-20',@endDay='2009-12-21'--设置始末日期
select
t.[ID],t.日期,t.出城市,t.到城市,t.价格
from
(select *
,[出城市]+[到城市] od
,row_number()over(partition by [出城市],[到城市] order by [日期])idx
from @t
where [日期] between @startDay and @endDay
)t
where t.idx<=3
order by t.od,t.日期
ID 日期 出城市 到城市 价格
----------- ----------------------- ---- ---- -----------
49 2009-11-25 00:00:00.000 PEK CTU 650
50 2009-11-26 00:00:00.000 PEK SZX 880
49 2009-11-25 00:00:00.000 PEK WUH 650
50 2009-11-26 00:00:00.000 PEK WUH 580
30 2009-11-20 00:00:00.000 SZX CKG 960
31 2009-11-21 00:00:00.000 SZX CKG 960
32 2009-11-22 00:00:00.000 SZX CKG 960
44 2009-11-20 00:00:00.000 SZX CSX 400
45 2009-11-21 00:00:00.000 SZX CSX 440
46 2009-11-22 00:00:00.000 SZX CSX 370
37 2009-11-20 00:00:00.000 SZX CTU 1060
38 2009-11-21 00:00:00.000 SZX CTU 1060
39 2009-11-22 00:00:00.000 SZX CTU 1060
16 2009-11-20 00:00:00.000 SZX PEK 1750
17 2009-11-21 00:00:00.000 SZX PEK 1750
18 2009-11-22 00:00:00.000 SZX PEK 1750
9 2009-11-20 00:00:00.000 SZX SHA 1190
10 2009-11-21 00:00:00.000 SZX SHA 1120
11 2009-11-22 00:00:00.000 SZX SHA 840
23 2009-11-20 00:00:00.000 SZX TSN 1850
24 2009-11-21 00:00:00.000 SZX TSN 1850
25 2009-11-22 00:00:00.000 SZX TSN 1390
2 2009-11-20 00:00:00.000 SZX WUH 740
3 2009-11-21 00:00:00.000 SZX WUH 690
4 2009-11-22 00:00:00.000 SZX WUH 690
--上一个忘记日期排序了:
select ID,日期,出发城市,到达城市,价格 from
(select * ,row_number() over(partition by 出发城市 ,到达城市 order by 价格 )as [order] from Table
where datediff(dd,getdate(),'2009-10-31')<16 ) as T
where T.[order]<4 order by 日期
---或者
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-10-30 11:29:36
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[日期] datetime,[出发城市] varchar(3),[到达城市] varchar(3),[价格] int)
insert [tb]
select 2,'2009-11-20','SZX','WUH',740 union all
select 3,'2009-11-21','SZX','WUH',690 union all
select 4,'2009-11-22','SZX','WUH',690 union all
select 5,'2009-11-23','SZX','WUH',540 union all
select 6,'2009-11-24','SZX','WUH',440 union all
select 7,'2009-11-25','SZX','WUH',440 union all
select 8,'2009-11-26','SZX','WUH',390 union all
select 9,'2009-11-20','SZX','SHA',1190 union all
select 10,'2009-11-21','SZX','SHA',1120 union all
select 11,'2009-11-22','SZX','SHA',840 union all
select 12,'2009-11-23','SZX','SHA',840 union all
select 13,'2009-11-24','SZX','SHA',700 union all
select 14,'2009-11-25','SZX','SHA',700 union all
select 15,'2009-11-26','SZX','SHA',630 union all
select 16,'2009-11-20','SZX','PEK',1750 union all
select 17,'2009-11-21','SZX','PEK',1750 union all
select 18,'2009-11-22','SZX','PEK',1750 union all
select 19,'2009-11-23','SZX','PEK',1750 union all
select 20,'2009-11-24','SZX','PEK',1750 union all
select 21,'2009-11-25','SZX','PEK',1750 union all
select 22,'2009-11-26','SZX','PEK',1400 union all
select 23,'2009-11-20','SZX','TSN',1850 union all
select 24,'2009-11-21','SZX','TSN',1850 union all
select 25,'2009-11-22','SZX','TSN',1390 union all
select 26,'2009-11-23','SZX','TSN',1110 union all
select 27,'2009-11-24','SZX','TSN',1110 union all
select 28,'2009-11-25','SZX','TSN',1110 union all
select 29,'2009-11-26','SZX','TSN',830 union all
select 30,'2009-11-20','SZX','CKG',960 union all
select 31,'2009-11-21','SZX','CKG',960 union all
select 32,'2009-11-22','SZX','CKG',960 union all
select 33,'2009-11-23','SZX','CKG',960 union all
select 34,'2009-11-24','SZX','CKG',580 union all
select 35,'2009-11-25','SZX','CKG',580 union all
select 36,'2009-11-26','SZX','CKG',580 union all
select 37,'2009-11-20','SZX','CTU',1060 union all
select 38,'2009-11-21','SZX','CTU',1060 union all
select 39,'2009-11-22','SZX','CTU',1060 union all
select 40,'2009-11-23','SZX','CTU',1060 union all
select 41,'2009-11-24','SZX','CTU',1060 union all
select 42,'2009-11-25','SZX','CTU',850 union all
select 43,'2009-11-26','SZX','CTU',850 union all
select 44,'2009-11-20','SZX','CSX',400 union all
select 45,'2009-11-21','SZX','CSX',440 union all
select 46,'2009-11-22','SZX','CSX',370 union all
select 47,'2009-11-23','SZX','CSX',400 union all
select 48,'2009-11-24','SZX','CSX',370 union all
select 49,'2009-11-25','SZX','CSX',370 union all
select 50,'2009-11-26','SZX','CSX',370 union all
select 49,'2009-11-25','PEK','WUH',650 union all
select 50,'2009-11-26','PEK','WUH',580 union all
select 49,'2009-11-25','PEK','CTU',650 union all
select 50,'2009-11-26','PEK','SZX',880
--------------开始查询--------------------------
SELECT
*
FROM
TB AS T
WHERE
3>(SELECT COUNT(1) FROM TB WHERE 出发城市=T.出发城市 and 到达城市=T.到达城市 AND 日期>T.日期)
and
datediff(dd,'2009-11-20',日期)<=15
----------------结果----------------------------
/* ID 日期 出发城市 到达城市 价格
----------- ----------------------- ---- ---- -----------
6 2009-11-24 00:00:00.000 SZX WUH 440
7 2009-11-25 00:00:00.000 SZX WUH 440
8 2009-11-26 00:00:00.000 SZX WUH 390
13 2009-11-24 00:00:00.000 SZX SHA 700
14 2009-11-25 00:00:00.000 SZX SHA 700
15 2009-11-26 00:00:00.000 SZX SHA 630
20 2009-11-24 00:00:00.000 SZX PEK 1750
21 2009-11-25 00:00:00.000 SZX PEK 1750
22 2009-11-26 00:00:00.000 SZX PEK 1400
27 2009-11-24 00:00:00.000 SZX TSN 1110
28 2009-11-25 00:00:00.000 SZX TSN 1110
29 2009-11-26 00:00:00.000 SZX TSN 830
34 2009-11-24 00:00:00.000 SZX CKG 580
35 2009-11-25 00:00:00.000 SZX CKG 580
36 2009-11-26 00:00:00.000 SZX CKG 580
41 2009-11-24 00:00:00.000 SZX CTU 1060
42 2009-11-25 00:00:00.000 SZX CTU 850
43 2009-11-26 00:00:00.000 SZX CTU 850
48 2009-11-24 00:00:00.000 SZX CSX 370
49 2009-11-25 00:00:00.000 SZX CSX 370
50 2009-11-26 00:00:00.000 SZX CSX 370
49 2009-11-25 00:00:00.000 PEK WUH 650
50 2009-11-26 00:00:00.000 PEK WUH 580
49 2009-11-25 00:00:00.000 PEK CTU 650
50 2009-11-26 00:00:00.000 PEK SZX 880
(25 行受影响)
*/
select ID,日期,出发城市,到达城市,价格 from
(select * ,row_number() over(partition by 出发城市 ,到达城市 order by 价格 )as [order] from Table
where datediff(dd,getdate(),'2009-10-31')<16 ) as T
where T.[order]<4
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-10-30 11:29:36
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[日期] datetime,[出发城市] varchar(3),[到达城市] varchar(3),[价格] int)
insert [tb]
select 2,'2009-11-20','SZX','WUH',740 union all
select 3,'2009-11-21','SZX','WUH',690 union all
select 4,'2009-11-22','SZX','WUH',690 union all
select 5,'2009-11-23','SZX','WUH',540 union all
select 6,'2009-11-24','SZX','WUH',440 union all
select 7,'2009-11-25','SZX','WUH',440 union all
select 8,'2009-11-26','SZX','WUH',390 union all
select 9,'2009-11-20','SZX','SHA',1190 union all
select 10,'2009-11-21','SZX','SHA',1120 union all
select 11,'2009-11-22','SZX','SHA',840 union all
select 12,'2009-11-23','SZX','SHA',840 union all
select 13,'2009-11-24','SZX','SHA',700 union all
select 14,'2009-11-25','SZX','SHA',700 union all
select 15,'2009-11-26','SZX','SHA',630 union all
select 16,'2009-11-20','SZX','PEK',1750 union all
select 17,'2009-11-21','SZX','PEK',1750 union all
select 18,'2009-11-22','SZX','PEK',1750 union all
select 19,'2009-11-23','SZX','PEK',1750 union all
select 20,'2009-11-24','SZX','PEK',1750 union all
select 21,'2009-11-25','SZX','PEK',1750 union all
select 22,'2009-11-26','SZX','PEK',1400 union all
select 23,'2009-11-20','SZX','TSN',1850 union all
select 24,'2009-11-21','SZX','TSN',1850 union all
select 25,'2009-11-22','SZX','TSN',1390 union all
select 26,'2009-11-23','SZX','TSN',1110 union all
select 27,'2009-11-24','SZX','TSN',1110 union all
select 28,'2009-11-25','SZX','TSN',1110 union all
select 29,'2009-11-26','SZX','TSN',830 union all
select 30,'2009-11-20','SZX','CKG',960 union all
select 31,'2009-11-21','SZX','CKG',960 union all
select 32,'2009-11-22','SZX','CKG',960 union all
select 33,'2009-11-23','SZX','CKG',960 union all
select 34,'2009-11-24','SZX','CKG',580 union all
select 35,'2009-11-25','SZX','CKG',580 union all
select 36,'2009-11-26','SZX','CKG',580 union all
select 37,'2009-11-20','SZX','CTU',1060 union all
select 38,'2009-11-21','SZX','CTU',1060 union all
select 39,'2009-11-22','SZX','CTU',1060 union all
select 40,'2009-11-23','SZX','CTU',1060 union all
select 41,'2009-11-24','SZX','CTU',1060 union all
select 42,'2009-11-25','SZX','CTU',850 union all
select 43,'2009-11-26','SZX','CTU',850 union all
select 44,'2009-11-20','SZX','CSX',400 union all
select 45,'2009-11-21','SZX','CSX',440 union all
select 46,'2009-11-22','SZX','CSX',370 union all
select 47,'2009-11-23','SZX','CSX',400 union all
select 48,'2009-11-24','SZX','CSX',370 union all
select 49,'2009-11-25','SZX','CSX',370 union all
select 50,'2009-11-26','SZX','CSX',370 union all
select 49,'2009-11-25','PEK','WUH',650 union all
select 50,'2009-11-26','PEK','WUH',580 union all
select 49,'2009-11-25','PEK','CTU',650 union all
select 50,'2009-11-26','PEK','SZX',880
--------------开始查询--------------------------
SELECT
*
FROM
TB AS T
WHERE
ID
IN
(SELECT TOP 3 ID FROM TB WHERE 出发城市=T.出发城市 and 到达城市=t.到达城市 ORDER BY 日期 DESC)
and
datediff(dd,'2009-11-20',日期)<=15
----------------结果----------------------------
/* ID 日期 出发城市 到达城市 价格
----------- ----------------------- ---- ---- -----------
6 2009-11-24 00:00:00.000 SZX WUH 440
7 2009-11-25 00:00:00.000 SZX WUH 440
8 2009-11-26 00:00:00.000 SZX WUH 390
13 2009-11-24 00:00:00.000 SZX SHA 700
14 2009-11-25 00:00:00.000 SZX SHA 700
15 2009-11-26 00:00:00.000 SZX SHA 630
20 2009-11-24 00:00:00.000 SZX PEK 1750
21 2009-11-25 00:00:00.000 SZX PEK 1750
22 2009-11-26 00:00:00.000 SZX PEK 1400
27 2009-11-24 00:00:00.000 SZX TSN 1110
28 2009-11-25 00:00:00.000 SZX TSN 1110
29 2009-11-26 00:00:00.000 SZX TSN 830
34 2009-11-24 00:00:00.000 SZX CKG 580
35 2009-11-25 00:00:00.000 SZX CKG 580
36 2009-11-26 00:00:00.000 SZX CKG 580
41 2009-11-24 00:00:00.000 SZX CTU 1060
42 2009-11-25 00:00:00.000 SZX CTU 850
43 2009-11-26 00:00:00.000 SZX CTU 850
48 2009-11-24 00:00:00.000 SZX CSX 370
49 2009-11-25 00:00:00.000 SZX CSX 370
50 2009-11-26 00:00:00.000 SZX CSX 370
49 2009-11-25 00:00:00.000 PEK WUH 650
50 2009-11-26 00:00:00.000 PEK WUH 580
49 2009-11-25 00:00:00.000 PEK CTU 650
50 2009-11-26 00:00:00.000 PEK SZX 880
(25 行受影响)
*/
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([ID] int,[日期] datetime,[出发城市] varchar(3),[到达城市] varchar(3),[价格] int)
insert [TB]
select 2,'2009-11-20','SZX','WUH',740 union all
select 3,'2009-11-21','SZX','WUH',690 union all
select 4,'2009-11-22','SZX','WUH',690 union all
select 5,'2009-11-23','SZX','WUH',540 union all
select 6,'2009-11-24','SZX','WUH',440 union all
select 7,'2009-11-25','SZX','WUH',440 union all
select 8,'2009-11-26','SZX','WUH',390 union all
select 9,'2009-11-20','SZX','SHA',1190 union all
select 10,'2009-11-21','SZX','SHA',1120 union all
select 11,'2009-11-22','SZX','SHA',840 union all
select 12,'2009-11-23','SZX','SHA',840 union all
select 13,'2009-11-24','SZX','SHA',700 union all
select 14,'2009-11-25','SZX','SHA',700 union all
select 15,'2009-11-26','SZX','SHA',630 union all
select 16,'2009-11-20','SZX','PEK',1750 union all
select 17,'2009-11-21','SZX','PEK',1750 union all
select 18,'2009-11-22','SZX','PEK',1750 union all
select 19,'2009-11-23','SZX','PEK',1750 union all
select 20,'2009-11-24','SZX','PEK',1750 union all
select 21,'2009-11-25','SZX','PEK',1750 union all
select 22,'2009-11-26','SZX','PEK',1400 union all
select 23,'2009-11-20','SZX','TSN',1850 union all
select 24,'2009-11-21','SZX','TSN',1850 union all
select 25,'2009-11-22','SZX','TSN',1390 union all
select 26,'2009-11-23','SZX','TSN',1110 union all
select 27,'2009-11-24','SZX','TSN',1110 union all
select 28,'2009-11-25','SZX','TSN',1110 union all
select 29,'2009-11-26','SZX','TSN',830 union all
select 30,'2009-11-20','SZX','CKG',960 union all
select 31,'2009-11-21','SZX','CKG',960 union all
select 32,'2009-11-22','SZX','CKG',960 union all
select 33,'2009-11-23','SZX','CKG',960 union all
select 34,'2009-11-24','SZX','CKG',580 union all
select 35,'2009-11-25','SZX','CKG',580 union all
select 36,'2009-11-26','SZX','CKG',580 union all
select 37,'2009-11-20','SZX','CTU',1060 union all
select 38,'2009-11-21','SZX','CTU',1060 union all
select 39,'2009-11-22','SZX','CTU',1060 union all
select 40,'2009-11-23','SZX','CTU',1060 union all
select 41,'2009-11-24','SZX','CTU',1060 union all
select 42,'2009-11-25','SZX','CTU',850 union all
select 43,'2009-11-26','SZX','CTU',850 union all
select 44,'2009-11-20','SZX','CSX',400 union all
select 45,'2009-11-21','SZX','CSX',440 union all
select 46,'2009-11-22','SZX','CSX',370 union all
select 47,'2009-11-23','SZX','CSX',400 union all
select 48,'2009-11-24','SZX','CSX',370 union all
select 49,'2009-11-25','SZX','CSX',370 union all
select 50,'2009-11-26','SZX','CSX',370 union all
select 49,'2009-11-25','PEK','WUH',650 union all
select 50,'2009-11-26','PEK','WUH',580 union all
select 49,'2009-11-25','PEK','CTU',650 union all
select 50,'2009-11-26','PEK','SZX',880
select * from [TB] t where iD
in(select top 3 ID from TB where t.出发城市+t.到达城市=出发城市+到达城市 order by 日期 desc)
/*
ID 日期 出发城市 到达城市 价格
----------- ------------------------------------------------------ ---- ---- -----------
6 2009-11-24 00:00:00.000 SZX WUH 440
7 2009-11-25 00:00:00.000 SZX WUH 440
8 2009-11-26 00:00:00.000 SZX WUH 390
13 2009-11-24 00:00:00.000 SZX SHA 700
14 2009-11-25 00:00:00.000 SZX SHA 700
15 2009-11-26 00:00:00.000 SZX SHA 630
20 2009-11-24 00:00:00.000 SZX PEK 1750
21 2009-11-25 00:00:00.000 SZX PEK 1750
22 2009-11-26 00:00:00.000 SZX PEK 1400
27 2009-11-24 00:00:00.000 SZX TSN 1110
28 2009-11-25 00:00:00.000 SZX TSN 1110
29 2009-11-26 00:00:00.000 SZX TSN 830
34 2009-11-24 00:00:00.000 SZX CKG 580
35 2009-11-25 00:00:00.000 SZX CKG 580
36 2009-11-26 00:00:00.000 SZX CKG 580
41 2009-11-24 00:00:00.000 SZX CTU 1060
42 2009-11-25 00:00:00.000 SZX CTU 850
43 2009-11-26 00:00:00.000 SZX CTU 850
48 2009-11-24 00:00:00.000 SZX CSX 370
49 2009-11-25 00:00:00.000 SZX CSX 370
50 2009-11-26 00:00:00.000 SZX CSX 370
49 2009-11-25 00:00:00.000 PEK WUH 650
50 2009-11-26 00:00:00.000 PEK WUH 580
49 2009-11-25 00:00:00.000 PEK CTU 650
50 2009-11-26 00:00:00.000 PEK SZX 880
(所影响的行数为 25 行)
*/
drop table TB
select * from [TB] t where iD in(select top 3 ID from TB where t.出发城市+t.到达城市=出发城市+到达城市 order by 日期 desc)
select * from tb b where id in(
select top 3 id from (
select * from tb t where
not exists(select 1 from tb where 日期=t.日期 and 出发城市=t.出发城市 and 到达城市=t.到达城市 and 价格=t.价格 and id>t.id)
and not exists(select 1 from tb where 日期=t.日期 and 出发城市=t.出发城市 and 到达城市=t.到达城市 and 价格<t.价格 and id<>t.id)
)c where b.出发城市+b.到达城市=出发城市+到达城市 order by 价格
) order by 出发城市,到达城市