Sql 获取最大记录,即使其为空

Sql 获取最大记录,即使其为空,sql,Sql,我从用户事务表中获取最大事务记录,它有一个transactiontypeid,可以为null,一个用户可以有多个事务。如果最大事务记录为null,则我的查询不会返回该记录。 这是我的问题 SELECT MAX([dbo].[UserTransaction].[UserTransactionId]) AS [UserTransactionId], [dbo].[UserTransaction].[Userid] AS [UserId] FROM [dbo].[UserTran

我从用户事务表中获取最大事务记录,它有一个transactiontypeid,可以为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表中的记录

 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,但它返回的是在PostgreSQL 9.3和MS SQL Server 2012上测试的记录1和2:

CREATE TABLE UserTransaction (
UserTransactionId int,
UserId int,
TransactionTypeId int
);
简化的插入,因为我们不需要测试的日期,这里也从不使用您的
用户表

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
这正是你想要的

这是给你自己看的


查询完全不依赖的空列无法更改您的结果。

我的答案已在MS SQL Server 2012上测试后编辑。请记住在将来说明您的DBMS和版本:)