이것이 사실 SQL (MS SQL 2005 사용)에서 가능한지 확실하지 않지만 매주 업데이트되는 고객 트랜잭션의 요약 테이블을 만드는 것이 좋습니다. 이것의 단순화 된 버전은 다음과 같이 보일 것이다 : 내 테이블 내에서특정 저장 프로 시저가 마지막으로 실행 된 이후 새 데이터가 있으면 레코드를 업데이트 하시겠습니까?
+-----------------+----------------+----------------+----------------+----------------+
+ Customer_id + 2007 purchases + 2008 purchases + 2009 purchases + 2010 purchases +
+-----------------+----------------+----------------+----------------+----------------+
+ id_001 + 0 + 7 + 10 + 50 +
+-----------------+----------------+----------------+----------------+----------------+
+ id_002 + 0 + 0 + 5 + 20 +
+-----------------+----------------+----------------+----------------+----------------+
+ id_003 + 100 + 0 + 0 + 0 +
+-----------------+----------------+----------------+----------------+----------------+
나는 그래서 자신의 데이터가 지난 주 내에서 변경되지 않은 경우 매주이 다시하고 싶지 않아 약 7 만 명의 고객이있다.
저장 프로 시저가 마지막으로 실행 된 이후 고객의 구매 데이터가 변경되었는지 여부를 결정하고 싶습니다. (따라서이 명명 된 프로 시저를 실행 한 이후 새로운 구매가 있었던 경우에만 관심이 있습니다. 다른 모든 항목은 무시). 그런 다음 해당 고객에게만 update 문을 적용하십시오.
내가 필터로이 적용 같은 일을의 라인을 따라 생각하고 있었다 :
WHERE EXISTS (SELECT customer_id
FROM purchases WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, purchase_date)) > DATEADD(dd, -8, DATEDIFF(dd, 0, getdate()))
는 지난 주 내에서 새로운 구매를 데리러하지만, 저장 프로 시저 변화의 주파수가이 필요한 경우 또한 변경 될 수 있으므로 저장 프로 시저의 마지막 발생 이후 업데이트 된 레코드 만 필터링하면 가장 좋습니다.
감사합니다.
실제 테이블 구조 -
CREATE TABLE
(
id UNIQUEIDENTIFIER
,customer_id NVARCHAR(255)
,date_received DATETIME
,value DECIMAL(18,3)
)
그래서 내가 (잘 작동) 위의 샘플 테이블의 각 고객에 대해 매년 정보를 포함하는 피벗 쿼리에 어떤 양을 사용하고 부분입니다 단순화 더 복잡한 쿼리가 필요합니다. 쿼리는 모든 고객에게 적용될 때 상당히 느립니다. 따라서 출력이 이미 테이블에있는 것과 다를 경우 저장 프로 시저 내에서만 실행하는 방법을 근본적으로 찾고 있습니다!
실제 구조를 포함하는 것이 좋습니다. 당신의 쿼리는 당신이 준 테이블 구조에 전혀 관계가 없습니다 ... – JNK