我有一个表 billing_history 包含以下字段
CREATE TABLE [dbo].[BILLING_HISTORY2](
[ID] [int] IDENTITY(1,1) NOT NULL,
[READING_MONTH_YEAR] [date] NULL,
[READING] [int] NULL,
[CONSUMER_ID] [int] NULL,
[payment_status] [bit] NOT NULL
)
http://www.sqlfiddle.com/#!3/892e0/5
以下查询返回消费者的 MAX Paid 和 Max Unpaid Values
SELECT MAX(READING) AS 'MAXIMUM_PAID_READING',consumer_id from billing_history2
where payment_status=0 GROUP BY consumer_id;
SELECT MAX(READING) AS 'MAXIMUM_UNPAID_READING',consumer_id from billing_history2
where payment_status=1 GROUP BY consumer_id;
但是,当我加入它们以从 MAXIMUM_UNPAID_READING 中减去 MAXIMUM_PAID_READING 以获得当前读数时,通过加入上述两个查询,它会导致返回所有具有匹配 consumer_id 的记录。因此,如果消费者尚未支付任何账单,则 ID 将在 PAID_READING 中省略,因此 INNER JOIN 不会返回任何结果。如果我使用 FULL OUTER JOIN,它会返回所有记录,但将差异设置为 NULL。
我需要通过从以前的未付 USAGE 中减去客户的当前 USAGE 来找出它。
我如何以这样一种方式加入这两个查询,以便无论该人过去是否支付过帐单,都可以找到结果差异。