我从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
答案 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列无法改变结果。