使用带有或不带Null的Max with Date值

时间:2016-08-11 01:36:51

标签: sql-server tsql

现在,经过这么多时间试图解决这个问题,我现在真的需要帮助。

我有一张表,其中包含大约50,000个客户的数百万条记录。每位客户至少有2000笔交易。

我希望有一张表格,其中包含每个客户在网站上购买或出售的最新日期。

我试过了

'FOR PURCHASES
Update tblmycustomers
set LastBoughtdate = (Select ISNULL(Max(trndate), '01-Jan-1900') from tbltransactions where Type = 'PURCHASES')
from tbltransactions.AccountRef = tblmycustomers.AccountNo

对于有" PURCHASES"的记录,它可以正常工作。但对于那些没有购买的人来说,它会保存另一个错误的日期

我希望它为每个没有购买的客户返回默认日期(" 01-Jan-1900"),并为那些拥有购买者的人返回最长交易日期。

请帮帮我。

4 个答案:

答案 0 :(得分:2)

我相信这会奏效。驱动程序表是“客户”,您希望保持联接到事务...所以即使没有事务,您也可以获得所有客户记录。所以...做这样的事情:)

    Select cust.AccountNo
    ,      isnull(max(trans.trndate), convert(date,'01/01/1900')) as LastBoughtDate
    from tblmycustomers as cust
    left join tbltransactions as trans on cust.AccountNo = trans.AccountRef
    where type = 'PURCHASES' 
    group by cust.AccountNo

答案 1 :(得分:2)

试试这个:

UPDATE c
SET LastBoughtdate = ISNULL(Q.MaxBoughtDate, '1900-01-01')
FROM tblmycustomers c
    LEFT JOIN 
    (SELECT AccountRef, MAX(trndate) AS MaxBoughtDate
    FROM tblTransactions
    WHERE Type = 'PURCHASES'
    GROUP BY AccountRef) Q ON Q.AccountRef = AccountNo

答案 2 :(得分:1)

此更新基于帐号的左外连接子查询的最大转换。

UPDATE 
    T
SET 
    T.LastBoughtdate=COALESCE(A.LastPurchaseDate,'01/01/1900')
FROM
    tblmycustomers T
LEFT OUTER JOIN
(
    SELECT
        T2.AccountRef
        LastPurchaseDate=MAX(trndate)
    FROM
        tbltransactions T2
    WHERE
        T2.Type='PURCHASES'
    GROUP BY
        T2.AccountRef
)AS A ON A.AccountRef=T.AccountNo

答案 3 :(得分:0)

如果你的" LastBoughtdate"是DateTime。我认为您需要转换" 01-01-1900'。转换(日期,' 01-01-1900',101)。