【发布时间】:2015-03-28 22:24:11
【问题描述】:
两张桌子 由 VoucherCode (nullable int) 和 Scheme (bigint) 组成的成员 Scheme-由schemeId(bigint)、mincode(int)、maxcode(int)组成
我需要在会员的优惠券代码中,最小和最大代码中找到任何空白。如果 mincode 为 1,maxcode 为 10,并且现有的凭证代码为 2、3 和 4,那么它应该带回 1。如果代码 1、2 和 4 存在,那么它应该带回 3。如果 1、2 和 3 存在,那么它应该带回来4。
这是我目前所拥有的:
SELECT MIN(ID + 1) FROM (
SELECT mincode AS ID from Scheme as s UNION ALL
SELECT
MIN(vouchercode + 1)
FROM
member mmm where mmm.voucherCode is not null
) AS T1
WHERE
ID+1 NOT IN (SELECT vouchercode as ID FROM member m where voucherCode is not null)
它有效,但不适用于所有 3 种情况。如果 2、3 和 4 存在,则返回 null 而不是 1。1、3 和 4 存在则返回 2,正确! 1、2 和 3 存在,它带回 null,而不是 4。
【问题讨论】:
-
使用计数表会非常简单。
标签: sql sql-server max min