1

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

问题是客户端可以转移到不同的位置。我已经成功选择了 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
4

1 回答 1

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 相关联。因此,除非您更改架构,否则稍后尝试按该因素进行分组是不可能的。

于 2013-07-14T19:54:16.083 回答