2012-06-02 2 views
1

가능한 중복 : 나는 테이블이 "된 table_1"라고했다
how to choose which row to insert with same id in sql?sql에서 select select distinct select를 수행하는 방법은 무엇입니까?

:

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 Completed 

여기에 제가 이미 가지고있는 코드가 있습니다. GROUP BY 절에 나타나지 않기 때문에 관련된 관련 설명을 가져 오는 데 문제가 있습니다.

INSERT INTO myTable2 (ID, STATUS, TIME) 
SELECT ID, STATUS, MIN(TIME) FROM myTable1 t1top 
WHERE EXISTS(SELECT * FROM myTable1 WHERE ID=t1top.ID AND STATUS='Complete') 
GROUP BY ID, STATUS 
ORDER BY ID ASC, STATUS DESC 

누구든지 내가이 점에 대해 매우 고맙게 생각하는 SQL 쿼리를 작성할 수 있습니다.

+0

그래 내 친구가 내가가 아닌 집계가 ON 절에 나타날 수 없습니다이 오류가 – user1429595

답변

1
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

타임 스탬프가 고유하다고 가정하면 테이블을 자체 조인하고 선택할 수 있습니다. (그렇지 않은 경우 설명은 데이터로 고유하게 정의되지 않습니다.) 이 같은

INSERT INTO myTable2 (ID, STATUS, TIME, DESCRIPTION) 
SELECT t1top.ID, t1top.STATUS, MIN(t1top.TIME), t1Copy.DESCRIPTION 
FROM myTable1 t1top 
    JOIN myTable1 t1Copy ON t1top.ID = t1Copy.ID 
WHERE EXISTS(SELECT * FROM myTable1 WHERE ID=t1top.ID AND STATUS='Complete') 
    AND MIN(t1top.TIME) = t1Copy.TIME 
GROUP BY ID, STATUS 
ORDER BY ID ASC, STATUS DESC 
+0

어이가없는 결과로, 어제 질문 같은 질문을 먹으 렴 HAVING 절 또는 선택 목록에 포함 된 하위 쿼리에서 집계되는 열은 외부 참조입니다. – user1429595

+0

네 시간, ID 및 색인은 모두 고유 한, 아직 – user1429595

+0

@ user1429595 - 죄송합니다. 바라기를 고쳤다. 질문의 태그를 다시 지정 (편집)하고 SQL Server 버전 (2005 또는 2008)의 태그를 추가하십시오. –

0

시도 뭔가 :

SELECT * FROM myTable1 WHERE DESCRIPTION = '%started%' OR DESCRIPTION = '%complete%' ORDER BY ID, STATUS 
0

당신은 이것에 대한 파티션 기능을 사용할 수 있습니다 : 즉

SELECT a.ID, a.Index, a.STATUS, a.TIME, a.DESCRIPTION FROM 
(
    SELECT ID, Index, STATUS, TIME, DESCRIPTION, 
    MIN(Index) OVER (PARTITION BY ID) AS first_index, 
    MAX(CASE WHEN STATUS = 'complete' then 1 else 0 end) OVER (PARTITION BY ID) AS is_complete 
    FROM myTable1 
) a 
WHERE a.is_complete = 1 AND (a.status = 'complete' OR a.index = a.first_index) 

,되었습니다 이벤트의 처음과 마지막 행을 선택 완료되었습니다.

+0

고마워요, 부분적으로 작동했습니다. 감사합니다. – user1429595

+0

@ user1429595 약간의 SQL 유머가 있습니까? 그것은 부분적으로 우습다;) – McGarnagle

관련 문제