2017-03-03 2 views
1

이 쿼리의 결과로 나에게 3 개의 최신 행 (Table1.Name으로 그룹화 됨)을 제공해야하는 행이 0 개가됩니다. 테이블 1에는 "이름", "타임 스탬프", "전압"이 있습니다. Table2에는 "이름", "데이터"가 있습니다.group by 및 sort by by 0 응답

"ORDER BY Table1.Timestamp"를 삭제하면 3 행 (예상대로)이 표시되지만 3 개의 최신 항목을 원하는 데이터베이스에서 가장 오래된 항목 3 개가됩니다. (Table1과 Table2에 3 개의 Name 값이 있습니다.)

코드 :

SELECT * from Table1 
INNER JOIN Table2 
ON Table1.Name=Table2.Name 
GROUP BY Table1.Name 
ORDER BY Table1.Timestamp; 
+0

* "하지만 3 개의 최신 항목을 원하는 데이터베이스에서 가장 오래된 항목 3 개입니다."* - ** ** ** GROUP BY에 대한 작업이 아닙니다. GROUP BY는 데이터베이스에서 행을 반환하지 않습니다. 데이터베이스에서 값을 사용하여 리턴하는 값을 생성합니다. – axiac

+0

비슷한 질문 검색 [tag : greatest-n-per-group]. – axiac

+0

여전히 어려움을 겪고 계시다면 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a를 참조하십시오. -very-simple-sql-query – Strawberry

답변

0

당신은이 같은 쿼리를 수행 할 수 있습니다

SELECT t.*,t2.* from Table1 t 
INNER JOIN Table2 t2 
ON t.Name=t2.Name 
WHERE t.Timestamp = (
    SELECT MAX(t3.Timestamp) FROM Table1 t3 
    WHERE t3.Name = t.Name 
) 
+0

@GuillaumeSTLR 코드가 작동합니다! 정말 고맙습니다. 처리하는 데 약 20 초가 걸리는 이유를 알고 있습니까? – Esp

+0

데이터베이스에있는 행 수에 따라 다릅니다. GROUP BY 문을 제거해보십시오! –

+0

나는 단지 4000 개의 행을 가지고있다. – Esp

0

당신은 정렬 할 수 및 복용 상위 3 : 당신이

SELECT * from Table1 
INNER JOIN Table2 
ON Table1.Name=Table2.Name 
ORDER BY Table1.Timestamp DESC 
LIMIT 3 
0

두 개 이상의 테이블을 조인하면 select 쿼리에서 *를 사용하지 않습니다. 선택한 쿼리에서 열을 모호하게 피하기 위해 특정 열 이름을 사용하면 Table1을 사용할 수도 있습니다. , 표 2.하지만 선택 쿼리에서 특정 열을 사용하는 것이 좋습니다.

표 INNER로부터 SELECT Table1.Name, Table1.Timestamp는 Table1.Timestamp BY Table1.Name ORDER BY Table1.Name = Table2.Name 그룹에 대해 표 2 가입;