0

ここに私が直面している興味深い課題があります。この問題に対するクエリを作成できるなら、あなたは天才だと思います。かなり長い間、私を悩ませてきました。

以下に 2 つのテーブルを示します。

顧客表

顧客ID、名前

取引表

transactionId、customerId、amountPaid、purchaseDate

今月は取引がなく、前月から借りがある人のすべての customerId を選択したいと考えています。

たとえば、選択した月が 10 月の場合、10 月のトランザクションがなく、10 月より前のトランザクションの合計が 0 より大きいすべての customerId を選択します。基本的に、私の目標は、今月は何も借りていないが、前の月は借りている顧客の領収書を表示するレポートを生成することです。この問題を検討していただきありがとうございます。

4

3 に答える 3

0

データベース モデルを再考する必要があるかもしれません。IMHO 複数の月を処理するには、より多くのテーブルが必要だと思います。月 (1 月から 12 月) を列として、userid 列を含むテーブルを考えてみましょう。そのことから、説明しているアルゴリズムを実行できるはずだと思います。

于 2012-09-30T20:05:23.163 に答える
0

user1238850 と Guffa の助けを借りて、最終的に解決しました。少し面倒ですが、今のところうまくいっているようです。

SELECT Customers.customerId 
FROM (
    SELECT Customers.customerId
    FROM  Customers
    WHERE (((Customers.customerId) Not In (
        SELECT Transactions.customerId 
        FROM Transactions 
        WHERE Customers.customerId = Transactions.customerId AND 
              Transactions.purchaseDate >=#8/1/2012# AND 
              Transactions.purchaseDate <#9/1/2012# OR 
              Transactions.customerId Is Null)))
      )

AS Q1     
INNER JOIN (     
    SELECT Transactions.customerId, Sum(Transactions.amountPaid) AS SumOfamountPaid
    FROM Transactions
    WHERE Transactions.purchaseDate <#8/1/2012#
    GROUP BY Transactions.customerId 
           ) AS Q2 
        ON Q1.customerId = Q2.customerId;
于 2012-10-04T13:34:40.927 に答える
0

選択した月までの購入について、各顧客の最終購入日を取得し、それが選択した月より前かどうかを確認できます。

Accessを使ってからしばらく経ちましたが、次のようなものです:

select c.customerId, c.name, max(t.purchaseDate) as lastPurchaseDate
from Customers as c
inner join Transactions as t on t.customerId = c.CustomerId and t.PurchaseDate < #2012-11-01#
group by c.customerId, c.name
having lastPurchaseDate < #2012-10-01#
于 2012-09-30T20:06:20.783 に答える