how to choose which row to insert with same id in sql?

后端 未结 4 1605
深忆病人
深忆病人 2021-01-26 21:07

so Basically I have a table called \"table_1\" :

ID   Index          STATUS          TIME        DESCRIPTION
1     15          pending           1:00       Start         


        
相关标签:
4条回答
  • 2021-01-26 21:13
    INSERT INTO t2 (ID, STATUS, TIME)
    SELECT ID, STATUS, MIN(TIME) FROM t1 t1top
    WHERE EXISTS(SELECT * FROM t1 WHERE ID=t1top.ID AND STATUS='Complete')
    GROUP BY ID, STATUS
    ORDER BY CAST(ID AS UNSIGNED) ASC, STATUS DESC
    

    After the insert is made, if you want to see the result according to your example, you have to run the following select:

    SELECT ID, STATUS, TIME FROM table_1
    ORDER BY CAST(ID AS UNSIGNED) ASC, STATUS DESC
    

    thats EXACTLY RIGHT, however I dont want to just SEE it that way, it needs to be inserted in the second table in that manner as well, any idea?

    0 讨论(0)
  • 2021-01-26 21:20

    you could get all the start times like this:

       select id, status, min(time) 
       from table_1 
       where status = 'Pending'
       group by id, status
    

    then completion like this:

       select id, status, time
       from table_1 
       where status = 'Complete'
       group by id, status
    

    you can use union to use both, and of course try:

       insert into table_2
    
    0 讨论(0)
  • 2021-01-26 21:22
    INSERT INTO table_2
    SELECT id,status,min(time)
    FROM table_1 AS t1
    WHERE EXISTS(SELECT 1
                 FROM table_1
                 WHERE id=t1.id
                     AND status='complete')
    GROUP BY id,status
    

    I think that should do it for you, haven't tested it though :(

    0 讨论(0)
  • 2021-01-26 21:26
    INSERT INTO myTable2 (ID, STATUS, TIME, DESCRIPTION)
    SELECT t1.ID, t1.STATUS, t1.TIME, t1.DESCRIPTION FROM table_1 as t1 
    WHERE STATUS = 'complete' 
    OR TIME = (SELECT min(TIME) FROM table_1 WHERE ID = t1.ID) 
    ORDER BY ID asc, STATUS desc
    
    0 讨论(0)
提交回复
热议问题