0

全体として、私がやろうとしているのは、過去 30 日間にサービスに現れなかった最新の顧客レコードのみを表示し、現在の日付に従って最新のサービス レコードのみを表示することです。

2 つのテーブルがあり、1 対多の関係で構造化されています。

最初のテーブルは table: "customer" です

|---------------------------------------------------|
| ID | FirstName | LastName | Male | Female | Phone | 
|---------------------------------------------------|
  35    John       Mulling    True    False    905    
  84    Mike       Stone      True    False    416    
  90    Cassie     Daniels    False   True     315    

2 番目のテーブルは「tblservice」というテーブルです。

|-------------------------------------------------------------------------|
| ServiceID  |  Followup30 | Timing     | Service1 | Total   | customerID |
|-------------------------------------------------------------------------|
      1         Yes         01/02/2012   Serv-001   120.00       35
      2         No          02/05/2012   Serv-003   500.00       84
      3         No          03/25/2012   Serv-008    85.00       90

このリストは、従業員が週に 1 回または月に 1 回、顧客をフォローアップするためにチェックする次のクエリを介してユーザー インターフェースでフィルタリングされます (顧客に電​​話をかけたら、従業員は「followup30」チェックボックスを「はい」に設定します)。 ):

SELECT customer.FirstName, customer.LastName, customer.Male, customer.Female,
customer.Phone, tblservice.Followup30, tblservice.Timing, tblservice.Service1,
tblservice.Total 
FROM customer 
INNER JOIN tblservice 
ON customer.ID=tblservice.customerID 
WHERE (((tblservice.Followup30)=No) 
AND ((tblservice.Timing)<=DateAdd("d",-30,Date())) 
AND ((customer.Phone) Is Not Null)) 
ORDER BY tblservice.Timing; 

ただし、問題は、顧客が 20 日以内に到着した場合のようです。以前のエントリはまだシステムに残っており、フォローアップが必要です。(この古いサービス レコードを表示したくないのは、最新のものと 30 日以上経過している場合のみです)

UI の上記のクエリは 30 日以上前の部分を処理しますが、リスト内の古いカスタマー サービス エントリをシステムから削除する必要があります。

試み:

そのため、従業員のすべての古いサービス エントリのこのリストをクレンジングするユーザー インターフェイスの読み込み時に更新クエリを実行したいと考えています。

最新の日付のものを除いて、各顧客のサービス テーブルの true/false フィールド (followup30) のすべてのエントリをクエリで true に設定するだけです。

これは私がこれまでに持っているものですが、各顧客を個別に扱うとは思わず、構文の問題がいくつかある可能性があります.

UPDATE tblservice
SET followup30='Yes'
WHERE (SELECT Timing FROM tblservice WHERE Timing <> (SELECT MAX(Timing) 
FROM tblservice));

どんな助けでも大歓迎です、ありがとう

4

2 に答える 2

0

相関サブクエリを使用してこれを行うことができます。

UPDATE tblservice
    SET followup30 = 'Yes'
    FROM (select max(Timing) as maxTiming
          from tblservice ts
          where tblservice.CustomerId = ts.Customerid
         ) t
    where tblservice.Timing = maxTiming

これは、最新のレコードのみを見るという、あなたが望むロジックを捉えていると思います。(30 日間のロジックを入れるには、変更が必要になる場合があります。)

于 2012-06-04T02:33:26.697 に答える
0

埋め込み SQL でこれを実行できると確信していますが、次のように LastService というクエリを作成すると

SELECT tblService.CustomerId, Max(tblService.Timeing) AS MaxOfTimeing FROM tblService GROUP BY tblService.CustomerId;

次に、次のように更新クエリで使用できます

UPDATE customer INNER JOIN LastService ON customer.CustomerId = LastService.CustomerId SET customer.Followup30 = iif(LastService.MaxOfTimeing<DateAdd("d",-30,Now()),'YES','NO')

これは、Followup30 がテキスト フィールドであると想定しています。YES/NO フィールドである場合は、それに応じて更新クエリを調整する必要があります。

于 2012-06-04T04:30:55.057 に答える