1

所以基本上我有一个名为“table_1”的表:

ID   Index          STATUS          TIME        DESCRIPTION
1     15          pending           1:00       Started Pending
1     16          pending           1:05       still in request
1     17          pending           1:10       still in request
1     18          complete          1:20       Transaction has been completed
2     19          pending           2:25       request has been started
2     20          pending           2:30       in progress
2     21          pending           2:35       in progess still
2     22          pending           2:40       still pending
2     23          complete          2:45       Transaction Compeleted

我需要将这些数据插入到我的第二个表“table_2”中,其中只包含开始和完成时间,所以我的“table_2”应该是这样的:

ID   Index   STATUS          TIME          DESCRIPTION
1     15     pending         1:00          Started Pending
1     18     complete        1:20          Transaction has been completed
2     19     pending         2:25          request has been started
2     23     complete        2:45          Transaction Compeleted

如果有人可以帮助我为此编写 sql 查询,我将不胜感激。提前致谢

4

4 回答 4

2
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

插入后,如果您想根据示例查看结果,则必须运行以下选择:

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

那是完全正确的,但是我不想只是这样看,它也需要以这种方式插入到第二个表中,知道吗?

于 2012-05-31T23:40:21.630 回答
1
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

我认为这应该为你做,虽然没有测试过:(

于 2012-05-31T23:37:30.010 回答
0

你可以像这样得到所有的开始时间:

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

然后像这样完成:

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

您可以使用 union 来使用两者,当然可以尝试:

   insert into table_2
于 2012-06-01T00:00:55.840 回答
0
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
于 2012-06-02T23:24:57.433 回答