简体   繁体   中英

SQL query to find new column

I need your help. I have a table named Test_Result with 2 columns as shown below.

ID  Source_ID
10  1
20  2
30  2
40  3 
50  3
60  3
70  4

I am trying to get output as below,but unable to get logic.

ID  Parent_ID   Source_ID
10   Null         1
20   Null         2
30   20           2
40   Null         3
50   40           3
60   50           3
70   Null         4

Kindly help me with this scenario. I attached question in picture for as well.

Regards, Abhi

在此处输入图片说明

These solutions (ROW_NUMBER/LAG) will work for MySQL 8.0+ or MariaDB 10.2

You could use ROW_NUMBER() and join to previous row:

CREATE TABLE tab(ID INT  ,Source_ID INT);

INSERT INTO tab(id, Source_id)
SELECT 10,  1
UNION ALL SELECT 20 , 2
UNION ALL SELECT 30,  2
UNION ALL SELECT 40 , 3 
UNION ALL SELECT 50 , 3
UNION ALL SELECT 60 , 3
UNION ALL SELECT 70 , 4;

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER(ORDER BY id) AS rn
    FROM tab
)
SELECT c1.ID,
       CASE WHEN c1.Source_ID = c2.Source_ID  THEN c2.Id END AS Parent_Id,
       c1.Source_ID
FROM cte c1
LEFT JOIN cte c2
  ON c1.rn = c2.rn+1;

Rextester Demo

EDIT:

Using LAG() windowed function:

SELECT c1.ID,
  CASE 
    WHEN c1.Source_ID = LAG(Source_ID) OVER w THEN LAG(ID) OVER w 
  END AS Parent_Id,
  c1.Source_ID
FROM tab c1
WINDOW w AS (ORDER BY ID)
ORDER BY id;

DBFiddle


EDIT2: Simulating LAG using variables:

SET @lag_Source_id='';
SET @lag_Id = '';

SELECT ID, 
       CASE WHEN Source_Id = lag_Source_ID THEN lag_ID END AS Parent_ID
       ,Source_ID
FROM (
    SELECT ID
    , Source_ID
    , @lag_Source_id AS lag_Source_id
    , @lag_Source_id:= Source_ID AS curr_Source_ID
    , @lag_Id AS lag_ID
    , @lag_Id := ID AS curr_ID 
    FROM tab
    ORDER BY id
) AS sub

RextesterDemo2

如果您使用的是mysql数据库,只需执行此操作,

SELECT ID, (ID + Source_ID) AS Parent_ID,   Source_ID FROM tableName LIMIT 10;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM