用于比较最近日期的SQL查询

时间:2013-07-14 19:26:22

标签: sql-server max subquery

我正在尝试为每个交易行选择一个位置。

问题是客户端可以转移到不同的位置。我已成功选择MAX(ClientLocation.TransferDate),但我不需要该日期。该日期是我比较交易发生时客户所在位置的唯一方法。

我根据他们拥有的ClientLocation.Location的数量,不断得到每个事务重复的结果。

SELECT MAX(ClientLocation.TransferDate, Transaction.Date, Client.Name, Location.Name
FROM Transaction
JOIN Client ON Transaction.ClientID = Client.ID
JOIN ClientLocation ON Client.ID = ClientLocation.ClientID 
JOIN Location ON ClientLocation.LocationID = Location.ID
WHERE Client.ID=ClientLocation.ClientID < Transaction.Date
GROUP BY Transaction.Date, Client.Name, Location.Name

1 个答案:

答案 0 :(得分:1)

我一直试图将你的问题原型化。部分问题是您的SQL不是有效的SQL DML语句。问题包括你的'MAX(...'聚合器列没有右括号,你的'Transaction'表使用保留关键字作为名称,你的WHERE子句无效(它包括多个不能一起工作的运算符)。

首先尝试这个:

SELECT MAX(t.TransferDate), t.Date, c.Name, l.Name
FROM [Transaction] t JOIN Client c ON t.ClientID = c.ID
JOIN ClientLocation cl ON c.ID = cl.ClientID 
JOIN Location l ON cl.LocationID = l.ID
WHERE c.ID = cl.ClientID 
GROUP BY t.Date, c.Name, l.Name

它至少可以编译,但目前还不清楚你究竟想要做什么。但是,我怀疑至少部分问题是您的Transactions表中没有任何内容表明给定事务与哪个ClientLocation相关联。因此,除非您更改架构,否则稍后尝试按该因素进行分组是不可能的。