0

これは顧客テーブルです。列「C_BillingDay」は、毎月の請求書の期日を示します。たとえば、値が 4 日である場合、その顧客の請求期日は毎月 4 日です。彼は4日に会費を支払わなければならない..

CREATE TABLE [dbo].[Customers](
 [CID] [int] IDENTITY(1,1) NOT NULL,
 [C_Name] [varchar](50) NULL,
 [C_EmailID] [varchar](20) NULL,
 [C_MobileNo] [varchar](20) NULL,
 [C_PhoneNo] [varchar](20) NULL,
 [C_HomeAddress] [varchar](max) NULL,
 [C_ServiceArea] [int] NULL,
 [C_AccountStatus] [int] NULL,
 [C_IPAdress] [varchar](50) NULL,
 [C_MACAddress] [varchar](50) NULL,
 [C_Package] [int] NULL, 
 [C_BillingDay] [int] NULL,
 [Balance] [float] NULL, 
 [C_AccountCreated] [datetime] NULL,
 [C_AccountModified] [datetime] NULL,

支払い表:

TABLE [dbo].[Payments](
    [PID] [int] IDENTITY(1,1) NOT NULL,
    [CID] [int] NULL,
    [Amount] [int] NULL,
    [PaymentType] [int] NULL,
    [Details/Comments] [varchar](max) NULL,
    [DateTimeRecieved] [datetime] NULL,
    [DateTimeModified] [datetime] NULL,

今日までに期限内に会費を支払っていないすべての債務不履行者に質問するのを手伝ってください...

私は DATEADD(MONTH,-1,GETDATE()) のような同様の関数を試してきましたが、望ましい結果が得られません:S

select * from Customers,payments 
 where Payments.DateTimeRecieved 
NOT BETWEEN GETDATE() AND DATEADD(MONTH,-1,GETDATE())
4

2 に答える 2

1

与えられた限られたシステム情報から、関連するプロセスが 2 つあると思われます。

(おそらくこれは別の場所に保存されている月額料金を示している)、(おそらくそれらがアクティブかどうかを示している) 、および今日の日付に基づいて、すべてのレコードUPDATE[Balance]列に対して実行する最初の毎日のジョブです。[Customers][C_Package][C_AccountStatus][C_BillingDay]

それが完了したら、あなたがする必要があるのは

SELECT [CID] FROM [dbo].[Customers] WHERE [Balance] > 0

お役に立てれば。

編集 ...

支払いを行っていない顧客を選択するには (ロジックに問題があるようですが):

SELECT c.[CID] 
  FROM [Customers] c
WHERE c.[CID] NOT IN 
  (SELECT p.[CID] FROM [Payments] p 
    WHERE p.[DateTimeRecieved] BETWEEN GETDATE() AND DATEADD(MONTH,-1,GETDATE()))

(おそらく、それよりもはるかに洗練されたクエリが存在します!)

于 2010-12-05T11:16:04.320 に答える
0

残高が0でないかどうか、そして今日が支払い日であるかどうかを確認するのはどうですか。何かのようなもの:

顧客から*を選択し、customers.balance>0およびtodays_date>=billdateである支払い。

私たちが扱っている言語やあなたの日付がどのような形式であるかを私は本当に知らないので、それは少し抽象的なです。私はまた、彼らが会費を支払うときに彼らが全額を支払うと仮定しています

于 2010-12-05T11:24:32.090 に答える