2009-05-19 5 views
0

나는 두 테이블에서 데이터를 가져해야합니다 Neptune_FN_AnalysisNeptune_premReadDate, ReadTime (Neptune_FN_Analysis에 모두) (A 사람의 이름 또는 아이템 # 비교) readings_miu_id라는 세 분야가 될 것입니다. 일부 readings_miu_id에는 여러 일 동안 복수 ReadTime이 있지만 하루에 readings_miu_id에 입력 된 '마지막 시간'만 가져 오려고합니다.
내가 선택한 모든 범위에 대해 입력 한 날짜가 있고 ReadTime 인 항목 만 입력해야하는 모든 readings_miu_id이 필요합니다.MS Access 쿼리에서 내부 조인을 사용하여 "person"당 하나의 레코드 만 선택할 수 있습니까?

내 솔루션은 지금까지 하나 개의 테이블에 기반 :

SELECT readings_miu_id, Reading, ReadDate, ReadTime, MIUwindow, SN, Noise, RSSI, OriginCol, ColID, Ownage 
FROM analyzed AS A 
WHERE ReadDate Between #4/21/2009# and #4/29/2009# 
AND ReadTime= 
    (SELECT TOP 1 analyzed.ReadTime FROM analyzed 
    where analyzed.readings_miu_id = A.readings_miu_id 
    AND analyzed.ReadDate = A.ReadDate 
    ORDER BY analyzed.ReadTime DESC); 

나는이 솔루션을 적용 할 때, 그것은 나에게 오류를 제공하기 때문에 나는 FROM [tableName] as A, INNER JOIN 할 수 없습니다. 내 전임자가 (내가/수정을 적응하기 위해 노력하고있는 무슨이다) 만든 원래의 코드는 다음과 같습니다

SELECT readings_miu_id, Reading, ReadDate,Format([MIUtime],'hh:mm:ss') AS 
ReadTime, MIUwindow, SN, Noise, RSSI, ColRSSI, MIURSSI, Firmware, CFGDate, FreqCorr, 
Active, MeterType, OriginCol, ColID, Ownage, SiteID, PremID, Neptune_prem.prem_group1, 
Neptune_prem.prem_group2, ReadID 
INTO analyzed 
FROM Neptune_FN_Analysis INNER JOIN 
Neptune_prem ON Neptune_FN_Analysis.PremID = Neptune_prem.premice_id 
WHERE SiteID = 36801 and ReadDate BETWEEN #04/21/09# AND #04/27/09# 
and OriginCol = 'US 29' and ColID = 1 and ColID <> 0 and Active = 'Y' 
+0

해당되는 경우 코드 샘플 버튼을 사용하여 질문을 다시 포맷하십시오. 또는 동일한 최종 결과에 대해 4 줄의 코드 줄을 추가하십시오. – RedFilter

+0

그래서 내가 왜 여기에 투표를 받는지 아는 사람이 있습니까? – Bryan

답변

2

나는 확실히 당신이 뭘하려는 건지 모두를 얻을 수는 없지만, 만약 내부

SELECT a.readings_miu_id, a.Reading, a.ReadDate, a.ReadTime, a.MIUwindow, a.SN, a.Noise, a.RSSI, a.OriginCol, a.ColID, a.Ownage 
FROM analyzed AS A INNER JOIN 
      (SELECT max(ReadTime) as MaxReadTime,readings_miu_id FROM analyzed 
      WHERE ReadDate Between #4/21/2009# and #4/29/2009# 
       GROUP BY readings_miu_id) as B 
      on a.readings_miu_id = b.readings_miu_id and a.MaxReadTime = b.ReadTime 
0 : 날짜가 나는 이런 식으로 뭔가를 시도 할 것
+0

분석 된 테이블이 테스트를 위해 사용 된 테이블입니다. 내부 조인 문에서 사용되지 않습니다. 내부 조인 문은 "분석 된"테이블을 만드는 데 사용됩니다. 기본적으로 질문의 두 번째 코드 세트는 – Bryan

+0

코드 예제입니다. 테이블 이름은 "foo"일 수 있습니다. 여러 항목이있는 레코드에 공통된 ID로 그룹화 된 MAX (날짜)를 가져 오는 부속 조회를 사용하는 개념이 문제점에 대한 가능한 해결책 중 하나입니다. 자신의 테이블과 필드 이름을 예제에 적용하십시오. – kscott

0

을 필요에 따라

SELECT readings_miu_id, Reading, ReadDate, ReadTime, MIUwindow, SN, 
Noise, RSSI, OriginCol, ColID, Ownage 
FROM analyzed 
INNER JOIN 
(SELECT [whatever the id common to all like records is] as likeID, MAX(analyzed.ReadTime) as latestDate 
FROM analyzed 
GROUP BY likeID) AS maxDate ON analyzed.likeID=maxDate.likeID AND analyzed.latestDate = maxDate.latestDate 
WHERE ReadDate Between #4/21/2009# and #4/29/2009# 

수정 최대 아니었다 경우 날짜의 MAX를 유도 할 수있는 하위 쿼리에 가입, 모든 기록을 제거 할 수

+0

분석 된 테이블이 테스트를 위해 사용 된 테이블입니다. 내부 조인 문에서 사용되지 않습니다. 내부 조인 문은 "분석 된"테이블을 만드는 데 사용됩니다. 기본적으로 두 번째 코드 세트는 사용하려고 시도하는 코드입니다. – Bryan

0
SELECT 
    <your columns> 
FROM 
    Neptune_FN_Analysis A1 
INNER JOIN Neptune_prem ON 
    P.premice_id = A1.PremID 
LEFT OUTER JOIN Neptune_FN_Analysis A2 ON 
    A2.readings_miu_id = A1.readings_miu_id AND 
    A2.ReadDate = A1.ReadDate AND 
    A2.ReadTime > A1.ReadTime 
WHERE 
    A2.readings_miu_id IS NULL AND 
    <add any additional criteria here> 
0

이번에는 "INNER JOIN"을 지정하면 무엇을 의미하는지 모르겠습니다. 다른 대답은 하위 쿼리를 사용하므로 여기에 두 개의 INNER JOIN을 사용하고 하위 쿼리를 사용하지 않는 예제가 있습니다. 오히려 내 내가 고객을 반환하여 Northwind을 사용하고 있습니다 : 스키마의 주위에 머리와 가장 최근 주문의 날짜를 얻는 것보다 :

SELECT C1.CustomerID, C1.CompanyName, 
     O1.OrderID, O1.OrderDate 
    FROM (Customers AS C1 
     INNER JOIN Orders AS O1 
      ON C1.CustomerID = O1.CustomerID) 
     INNER JOIN Orders AS O2 
      ON C1.CustomerID = O2.CustomerID 
GROUP 
    BY C1.CustomerID, C1.CompanyName, 
     O1.OrderID, O1.OrderDate 
HAVING O1.OrderDate = MAX(O2.OrderDate);