2010-12-05 4 views
0

これはcustomersテーブルです。 'C_BillingDay'列は、請求日が4月の請求期日その顧客の4分の1です。彼は4rthで彼の会費を支払わなければならない。..毎月の請求システム - 今日までに料金を支払っていない不法行為者のリストを取得するクエリ

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, 

助けてください、私、今日で時間に会費を支払っていないすべての債務不履行を...キシに

私は()MONTH、-1、GETDATE()DATEADDのような類似の機能をしようとしているが、それらは望ましい結果を与えていない:Sを

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

彼らの全体のバランスを完済することを前提に作っていますS – ehmad

答えて

1

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

[Balance][C_Package]に基づい[Customers]のすべてのレコードの列(おそらくこれは他の場所に格納された月額料金を示す)、[C_AccountStatus](おそらくそれらがアクティブであるかどうかを示す)、[C_BillingDay]、そして今日でUPDATEを行い最初の毎日の仕事日付。

それが終わったらすべてを行う必要が

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())) 

(それよりも道よりエレガントなクエリは、おそらくあります!)

+0

select * from customers、payments Payments.DateTimeRecieved GETDATE()とDATEADD(MONTH、-1、GETDATE()の間にないもの) -1、GETDATE()) – ehmad

+0

私は上記のようなsomthngをしたいと思っています:S – ehmad

+0

あなたが求めていると思う質問を追加しました。 – philhobgen

0

残高が0でなく、今日の支払い日であるかどうかのチェックはどうですか。何かのように:

select * from customers、payments where customers.balance> 0 and todays_date> = billdate;

そのビット抽象的な私は本当に私たちが扱うか、どのようなあなたの日付がである形成されているどのような言語を知らないので。 私はまた、私は彼らの会費を支払うとき、彼らは

関連する問題