获得最大记录,即使它是空的

时间:2014-10-02 09:08:54

标签: sql

我从USer Transaction表中获取Maximum transaction Record,它有一个transactiontypeid,可以为null,用户可以有多个事务。如果null为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 Table中的记录

 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 个答案:

答案 0 :(得分:1)

在PostgreSQL 9.3和MS SQL Server 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子句,并且结果打印正确:

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

这正是你想要的。

这里SQL Fiddle让你自己看看。

查询根本不依赖的NULL列无法改变结果