Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

SQL 取出每一个分组中的第二条记录,如果没有第二条记录则取第一条记录

陈诺  发表于:2013-06-14 11:07:31  
复制

有如下表结构:  
  字段      A,       B,       C  
  值为      a1,     b1,     c1  
            a2,     b2,     c2  
            a2,     b3,     c3  
            a3,     b4,     c4  
            a3,     b5,     c5   

想要得到的结果集以A字段为分组条件,并取出每一个分组中的第二条记录,如果没有第二条记录则取第一条记录,如下:   
            A,       B,       C   
  值为      a1,     b1,     c1       --a1分组的第一条记录。  
            a2,     b3,     c3       --a2分组的第二条记录。  
            a3,     b5,     c5       --a3分组的第二条记录。

 

Top
hongyin 发表于:2013-06-14 13:09:55

如果增加一主键ID,如下图


则查询如下:

SELECT 查询1.A, Last(查询1.B) AS B之Last, Last(查询1.C) AS C之Last
FROM (SELECT *
FROM T AS T1
WHERE T1.[ID] In (select top 2 ID from T where A=T1.A  ORDER   BY ID)
) AS 查询1
GROUP BY 查询1.A;



陈诺 发表于:2013-06-14 15:18:35

谢谢hongyin,在access里调试结果是正确的。。。(只是要把“T “改成表名“查询1”)

 

则查询如下:

SELECT 查询1.A, Last(查询1.B) AS B之Last, Last(查询1.C) AS C之Last
FROM (SELECT *
FROM 查询1 AS T1
WHERE T1.[ID] In (select top 2 ID from 查询1 where A=T1.A  ORDER   BY ID)
) AS 查询1
GROUP BY 查询1.A;

 

但是如果在SQL测试,则会出现'Last' is not a recognized built-in function name.



 



陈诺 发表于:2013-06-14 16:03:04

复杂点的问题:

 

有如下表结构:  
  字段      A,       B,       C  
  值为      a1,     b1,     c1  
            a2,     b2,     c2  
            a2,     b3,     c3  
            a3,     b4,     c4  
            a3,     b5,     c5   

想要得到的结果集以A字段为分组条件,B1,C1取出每一个分组中的第一条记录,B2,C2取值第一分组中第二条记录,如果没有第二条记录,则为空,如下:   
            A,       B1,    C1,     B2,      C2            
  值为    a1,   b1,       c1                                    --B1,C1 取值a1分组的第一条记录。  
            a2,     b2,     c2       b3          c3            --B1,C1 取值a2分组的第一条记录;B2,C2 取值a3分组的第二条记录。  
            a3,     b4,     c4       b5          c5            --B1,C1 取值a3分组的第一条记录;B2,C2 取值a3分组的第二条记录。

 



总记录:3篇  页次:1/1 9 1 :