문제

내부 조인을 사용하여 쿼리를 사용하여 2 개의 테이블이 있습니다.

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

2 일 사이의 보고서에 대한 항목의 ID를 계산합니다. 표 1은 보고서 (날짜, GroupId 등)에 대한 정보를 보유하고 있으며, 표 2는 보고서의 항목을 보유합니다.

2 날짜 사이에 최신 날짜로 보고서에서 ID를 선택한다는 점을 제외하고는 거의 정확히 동일하게 쿼리를 만들고 싶습니다.

누구든지 도울 수 있습니까? Max (Date) 유형 쿼리 주위에 머리를 잡을 수는 없습니다.

감사,


나는 아마도 중첩 된 SQL 쿼리라고 생각했을 것입니다 - 당신은 이것을 할 수 있습니까? Google에서 참조를 찾을 수 있지만 작동하게 할 수는 없습니다 ...

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ? AND 
(
    SELECT MAX(date) 
    FROM table1 
    WHERE date > ? AND date < ?
)

그래도 그것을 작동시킬 수는 없으며, phpmyadmin에서 테스트하려고 할 때 사용자가 선정 된 권한이 없다는 오류로 시작합니다. 이상하게도, 이것은 테스트 서버이므로 루트로 로그인했습니다.

도움이 되었습니까?

해결책

테이블의 구조에 관한 추가 정보가 없으면 다음과 같은 것을 시도하는 것이 좋습니다.

SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)

나는 이것을 테스트하지 않았지만 한 방향 으로이 문제로 갈 수있는 한 방향으로 가리킬 수 있습니다. 하위 쿼리 사용에 대한 다른 제안은 유효하며 다음과 같은 작업을 수행 할 수 있습니다.

SELECT *
FROM table2 t2 
WHERE t2.parent_id IN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
)

또는 임시 테이블에 가입 :

SELECT *
FROM table2 t2
INNER JOIN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id

다른 팁

 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

날짜와 함께 10 행을 얻을 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top