TSQL帮助简单查询

时间:2010-06-16 15:53:19

标签: sql sql-server tsql

我正在使用SQL-SERVER 2005。

我在图表中可以看到两张桌子,CellularUsers和CellularPayments。当规则很少时,我需要让需要收费的用户:

  1. 如果userID的最后一个CellularPayments.paymentSum为8则选择全部 userID和userCellularNumbers在哪里 CellularPayments.date> GETDATE()
  2. 如果userID的最后一个CellularPayments.paymentSum为18,则选择全部 userID和userCellularNumbers在哪里 DATEADD(DD,7,CellularPayments.date)GT; GETDATE()
  3. alt text http://img256.imageshack.us/img256/1946/63468037.png

    预览图表click here

    我现在怎么做,但对我来说看起来不对

    select cu.userID,cu.userCellularNumber from CellularUsers cu
    left join CellularPayments cp
    on cu.userID=cp.userID
    where cu.isPaymentRecurring=1
    and isActivated=1
    and cp.paymentID in (select max(paymentID) from CellularPayments group by userID)
    

    提前致谢

1 个答案:

答案 0 :(得分:1)

如果我正确地遵循你的逻辑,那么将以下AND语句添加到where子句应该这样做:

and dateadd( dd
            ,case cp.PaymentSum
               when 8 then 0
               when 18 then 7
               else [AppropriateDefaultValue]
             end
            ,CellularPayments.date) > getdate()

(我也将它作为内部联接。)