2013-02-19 2 views
1

다음 데이터베이스 구조를 사용하고 EntityFramework를 사용하십시오.쿼리 한 후 누락 된 SQL 항목을 확인하는 방법은 무엇입니까?

enter image description here

매 5 분 'phasecount'표 '상'의 각 레코드에 대한 레코드를 가져옵니다.

using (Entities db = new Entities()) 
{ 
    db.ContextOptions.LazyLoadingEnabled = false; 

    int numberofcontrollers = (from a in db.Junctions select a).Count(); 
    List<int> controllerids = (from b in db.Junctions select b.Id).ToList(); 

    var configuration = (from c in db.Configurations select c).First(); 

    DateTime laststamp = (from s in db.Stamps select s.Time).Max(); 
    DateTime firststamp = laststamp.AddMinutes(-1 * (CountIntervalsBefore - 1) * TimeSliceLength); 

    var stamps = from s in db.Stamps.Include("PhaseCounts.Phase") where s.Time >= firststamp && s.Time <= laststamp orderby s.Id select s; 
    // check consistency; number of stamps should equal timeslices*controllers 

    if (stamps.Count() != CountIntervalsBefore * numberofcontrollers) 
    { 
     //counts are not available for all timeslices and controllers 
     //do extended consistency check (and use dummy data?) 
    } 
} 

모든 단계에서 각 단계마다 1 시간 동안을 선택하고 싶습니다.

스탬프는 일반적으로 72, 즉 12 분 5 분 슬라이스 * 6 교차점과 같습니다.

72와 같지 않은 경우 데이터가 누락 된 위상 및 타임 스탬프를 결정하는 방법은 무엇입니까?

답변

0

솔루션에 대한 내 첫 생각; 이것은 최적의 검색 방법이 아니지만 작동해야합니다.

그룹에서 가장 빠른 타임 스탬프를 가져 와서 해당 타임 스탬프가있는 정확한 레코드 수를 보유하고 있는지 확인하십시오 (위에서 말했듯이 저는 이것이 6이라고 생각합니다). 이 세트에서 누락 된 부분이 있는지 확인할 수 있습니다. 그런 다음 현재 시간 스탬프와 가장 가까운 타임 스탬프를 찾습니다. 5 분 이상 걸리면 전체 세트가 누락됩니다. 약 5 분이면 첫 번째 세트와 같이 해당 타임 스탬프가있는 정확한 레코드 수가 있는지 확인하십시오. (누락 된 레코드 + 총 발견 레코드 = 72) 또는 레코드가 부족할 때까지 반복하십시오. 레코드가 끝나고 여전히 누락 된 부분이 있으면 가장 빠른 타임 스탬프가 첫 번째 타임 스탬프가 아니며 거기에서도 누락 된 완전한 세트가 있습니다. 이 시점에서 (누락 된 레코드 + 총 레코드 = 72) 또는 무언가가 잘못되었습니다.

+0

감사합니다. 똑똑한 조인으로이 작업을 수행하고 싶었지만 지금까지는 어떻게 찾을 수없는 ... – Cornelis

관련 문제