2013-07-14 2 views
1

각 트랜잭션 행마다 하나의 위치를 ​​선택하려고합니다.가장 가까운 날짜를 비교하기위한 SQL 쿼리

문제는 클라이언트가 다른 위치로 전송할 수 있다는 것입니다. 나는 MAX (ClientLocation.TransferDate)를 선택하는데 성공했지만 그 날짜는 필요 없다. 이 날짜는 거래가 일어 났을 때 고객이 있던 위치를 비교하는 유일한 방법입니다.

각 트랜잭션이 ClientLocation의 수에 따라 중복되는 결과가 계속 나타납니다. 위치가있는 위치.

SELECT MAX(ClientLocation.TransferDate, Transaction.Date, Client.Name, Location.Name 
FROM Transaction 
JOIN Client ON Transaction.ClientID = Client.ID 
JOIN ClientLocation ON Client.ID = ClientLocation.ClientID 
JOIN Location ON ClientLocation.LocationID = Location.ID 
WHERE Client.ID=ClientLocation.ClientID < Transaction.Date 
GROUP BY Transaction.Date, Client.Name, Location.Name 
+0

Client, ClientLocation, Location 및 Transaction 테이블에 대해 DDL을 제공 할 수 있습니까? 같은 데이터를 쿼리 할 때 예상되는 출력과 샘플 데이터도 도움이됩니다. – Deleted

답변

1

방금 ​​문제를 프로토 타입 화하려고했습니다. 문제의 일부는 SQL이 유효한 SQL DML 문이 아니라는 것입니다. 문제는 닫는 괄호가없는 'MAX (...'집계 자 열, 예약어를 이름으로 사용하는 'Transaction'테이블 및 함께 작동하지 않는 여러 연산자가 포함 된 WHERE 절이 유효하지 않음을 나타냅니다.

우선이 시도 :

SELECT MAX(t.TransferDate), t.Date, c.Name, l.Name 
FROM [Transaction] t JOIN Client c ON t.ClientID = c.ID 
JOIN ClientLocation cl ON c.ID = cl.ClientID 
JOIN Location l ON cl.LocationID = l.ID 
WHERE c.ID = cl.ClientID 
GROUP BY t.Date, c.Name, l.Name 

을 그것은 적어도 컴파일, 아직도 당신이 실제로 뭘 하려는지 불분명하지만 나는 생각한다, 그러나, 문제의 적어도 일부는 것이 아무것도 없다는 것을. 당신의 스키마를 변경하지 않는 한, 나중에 그 요소로 그룹화하려고 시도하는 것이 불가능할 것입니다.

관련 문제