2014-10-02 60 views
-2

我得到來自USer Transaction表的最大交易記錄,它有一個可以爲空的transactiontypeid,用戶可以有多個交易。我的查詢沒有返回最大的交易記錄,如果它的null。 這是我的查詢即使爲空也能獲得最大記錄

SELECT 
    MAX([dbo].[UserTransaction].[UserTransactionId]) AS [UserTransactionId], 
    [dbo].[UserTransaction].[Userid] AS [UserId] 
FROM [dbo].[UserTransaction] 
WHERE ([dbo].[UserTransaction].[Userid] IN (2,3)) 
GROUP BY [dbo].[UserTransaction].[Userid] 

,這些都是我的表

User Table 
    UserId 
    FirstName 
    LastName 

    UserTransaction Table 
    UserTransactionId 
    UserId 
    TransactionTypeId 
    LastModifiedDate 

,這是UserTransaction的表中的記錄

1 2 5 2014-09-26 02:00:21.487 
2 3 4  2014-09-26 02:00:21.487 
3 2 null 2014-09-27 02:00:21.487 
4 3 null 2014-09-27 02:00:21.487 

應該返回記錄3和4,但其返回記錄1和2

回答

1

測試PostgreSQL 9.3和MS SQL Se rver 2012:

CREATE TABLE UserTransaction (
UserTransactionId int, 
UserId int, 
TransactionTypeId int 
); 

簡體插入,因爲我們不需要日期的考驗,也是你User Table是從來沒有在這裏使用。

INSERT INTO UserTransaction VALUES (1,2,5),(2,3,4),(3,2,null),(4,3,null); 

現在我們使用

SELECT MAX(UserTransactionId), UserId FROM UserTransaction WHERE UserId IN (2,3) GROUP BY UserId; 

當然WHERE子句可以在這裏ommitted中,結果正確打印:

max | UserId 
-----+-------- 
    4 |  3 
    3 |  2 

這是你想要的到底是什麼。

這裏的SQL Fiddle讓你親自看到它。

沒有辦法,一個查詢根本不依賴的NULL列正在改變你的結果

+0

我正在SQL服務器上工作 – 2014-10-02 10:42:09

+1

我的答案已經在MS SQL Server 2012上進行測試後進行了編輯。請記住在未來聲明您的DBMS和版本:) – 2014-10-02 10:52:33

相關問題