SELECT TOP 100 *
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 卡号>'1800000455'
and 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表
where 卡号>'1800000455'
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 卡号>'1800000455'
and 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表
where 卡号>'1800000455'
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表
where
卡号>'1800000455'
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期
TOP 15 PERCENT /* Return the top 15% of the result set. */.如果一个 SELECT 语句既包含 TOP 又包含 ORDER BY 子句,那么返回的行将会从排序后的结果集中选择。整个结果集按照指定的顺序建立并且返回排好序的结果集的前 n 行。
SELECT TOP 100 *
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表 where 卡号>'1800000455'
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期
然后把结果按发卡日期排序(降序)然后取出前100个的所有信息然后再按发卡日期排序你说的卡号>'1800000455' 的条件要看你是在哪个条件下加?
如果是在取出前1000个的时候加就是
SELECT TOP 100 *
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表
where 卡号>'1800000455'
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期如果是取出100个后加这个条件就是
SELECT TOP 100 *
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 卡号>'1800000455'
and 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表 ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期
--这句的作用可以这样理解(分解语句来执行)--1.首先执行:
SELECT TOP 1000 发卡日期 FROM 持卡人表 ORDER BY 地区代理号使用:
从 [持卡人表] 得到一个按 [地区代理号] 从大到小的 1000 个 [发卡日期]我们把它存放一个临时表 #t 中SELECT TOP 1000 发卡日期 into #t FROM 持卡人表 ORDER BY 地区代理号
--2.接着执行
SELECT TOP 100 * FROM 持卡人表
WHERE 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC--把刚才的临时表带进去
SELECT TOP 100 * FROM 持卡人表
WHERE 发卡日期 IN (select 发卡日期 from #t)
ORDER BY 发卡日期 DESC作用就是取 [发卡日期] 最近的100条记录
并且满足条件: [发卡日期] 在第一次查询的结果中我们把结果放入临时表 #t1 中SELECT TOP 100 * into #t1 FROM 持卡人表
WHERE 发卡日期 IN (select 发卡日期 from #t)
ORDER BY 发卡日期 DESC
--3.再执行
SELECT TOP 100 *
FROM (SELECT TOP 100 *
FROM 持卡人表
WHERE 发卡日期 IN
(SELECT TOP 1000 发卡日期
FROM 持卡人表
ORDER BY 地区代理号)
ORDER BY 发卡日期 DESC) tmp
ORDER BY 发卡日期--带入临时表
SELECT TOP 100 *
FROM #t1
ORDER BY 发卡日期这个作用就很明白了,在第二次查询结果的基础上,把记录顺序调整为按 [发卡日期] 升序
如果加到最内层里,则查处发卡日期符合条件并且卡号>'1800000455' 的记录,然后在此记录中选择前地区代理号靠前的100条;
如果加到第二层里,则是在子查询返回的1000条记录中筛选卡号>'1800000455' 的发卡日期靠后的100条记录。
如果加到最外层,则是取发卡日期靠前的100条记录。
然后把结果按发卡日期排序(降序)取出前100个的所有信息
然后再按发卡日期排序(降序)取出前100个的所有信息条件语句加到任意一层里都可以,但实现的目的和得到的结果肯定不一样:
如果加到最内层里,则查处发卡日期符合条件并且卡号>'1800000455' 的记录,然后在此记录中选择前地区代理号靠前的100条;
如果加到第二层里,则是在子查询返回的1000条记录中筛选卡号>'1800000455' 的发卡日期靠后的100条记录。
如果加到最外层,则是取发卡日期靠前的100条且卡号>'1800000455' 记录。