none
查询语句问题 RRS feed

  • 问题

  • 假设我有很多手机号6尾的8尾的,可以查询出来,之后我要查询上一条是什么。如何写:

    ID      号码列                    查询之后(我会的)变成                 但我最终想要查的是6尾之前的那行是什么?如何写语句

     1      xxxxxxxxxxx           (id) 3   15899996666              我想要的ID    2   XXXXXXXXXXX                    

     2      xxxxxxxxxx             (id) 6   15899995558               我想要的ID    5   XXXXXXXXXXX    

     3      15899996666                                                                            

     4      xxxxxxxxxxx 

     5    xxxxxxxxxxx                                                         

     6    15899995558   

     7   xxxxxxxxxxx

    2010年11月9日 15:26

答案

  • SELECT * FROM [TableName] WHERE [ID] IN
    ( 
    	SELECT [ID]-1 FROM [TableName] WHERE substring([号码列],LEN([号码列]),1) IN ('6','8') 
    )
    

    歡迎參觀我的Blog.NET菜鳥自救會
    • 已标记为答案 易好得 2010年11月11日 14:24
    2010年11月9日 16:34
  • -- 如果 id 不具有连续性
    SELECT
    	*
    FROM table_name A
    WHERE (
    		SELECT TOP 1	-- 当前行的下一行的号码列
    			号码列
    		FROM table_name B
    		WHERE A.ID < B.ID
    		ORDER BY B.ID
    	) LIKE '%[68]'		-- 判断是否6, 8 尾
    
    • 已标记为答案 易好得 2010年11月11日 14:25
    2010年11月10日 4:38

全部回复

  • SELECT * FROM [TableName] WHERE [ID] IN
    ( 
    	SELECT [ID]-1 FROM [TableName] WHERE substring([号码列],LEN([号码列]),1) IN ('6','8') 
    )
    

    歡迎參觀我的Blog.NET菜鳥自救會
    • 已标记为答案 易好得 2010年11月11日 14:24
    2010年11月9日 16:34
  • -- 如果 id 不具有连续性
    SELECT
    	*
    FROM table_name A
    WHERE (
    		SELECT TOP 1	-- 当前行的下一行的号码列
    			号码列
    		FROM table_name B
    		WHERE A.ID < B.ID
    		ORDER BY B.ID
    	) LIKE '%[68]'		-- 判断是否6, 8 尾
    
    • 已标记为答案 易好得 2010年11月11日 14:25
    2010年11月10日 4:38
  • --如果是SQL2005的话
    ;WITH MU AS (
    SELECT *,ROW_NUMBER() OVER(ORDER BY ID) AS NID FROM TB
    )
    SELECT T1.*
    FROM MU T1
    INNER JOIN MU T2 ON T1.NID=T2.NID-1 AND T2.[号码列] LIKE '%[68]'
    
    2010年11月10日 5:44