Jea*_*tin 4 sql sql-server-2008
有人可以帮我解决这个问题吗?
SELECT CLIENT.ID_CLIENT ,
EVALUATION_CLIENT.ID_EVAL ,
MAX(EVALUATION_CLIENT.Date) AS DATE
FROM EVALUATION_CLIENT
INNER JOIN CLIENT
ON CLIENT.ID_CLIENT = EVALUATION_CLIENT.FK_IDClient
WHERE EVALUATION_CLIENT.Date
BETWEEN @START_DATE_LOCAL
AND @END_DATE_LOCAL
GROUP BY CLIENT.IDCLIENT,
EVALUATION_CLIENT.ID_EVAL
Run Code Online (Sandbox Code Playgroud)
它返回...
ID_CLIENT | ID_EVAL | DATE_EVAL
1423 |11160 | 2008-02-12 00:00:00.000
1423 |11161 | 2008-02-18 00:00:00.000
18 |11162 | 2008-02-15 00:00:00.000
666 |11163 | 2008-02-19 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
但我想要的东西(没有重复的客户端)
ID_CLIENT | ID_EVAL | DATE_EVAL
1423 |11161 | 2008-02-18 00:00:00.000
18 |11162 | 2008-02-15 00:00:00.000
666 |11163 | 2008-02-19 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
我使用的是MSSQL 2008
非常感谢 !
更新: Id_client需要最近日期的Id_Eval
如果您只想要每个客户端的最新条目,您可以使用:
;WITH ClientEvals AS
(
SELECT
c.ID_CLIENT ,
e.ID_EVAL ,
e.Date AS ClientDATE,
ROW_NUMBER() OVER(PARTITION BY c.ID_CLIENT ORDER BY e.Date DESC) AS 'RowNo'
FROM
dbo.EVALUATION_CLIENT e
INNER JOIN
dbo.CLIENT c ON c.ID_CLIENT = e.FK_IDClient
WHERE
e.Date BETWEEN @START_DATE_LOCAL AND @END_DATE_LOCAL
)
SELECT
ID_CLIENT ,
ID_EVAL ,
ClientDATE
FROM
ClientEvals
WHERE
RowNo = 1
Run Code Online (Sandbox Code Playgroud)
CTE内部的内部选择(公用表表达式)选择每个客户端的evals,并按以下方式对数据进行分区ID_Client- 每个客户端从1开始获取行号,其中1是最近的条目.
外部SELECT基于该CTE并且仅选择具有RowNo = 1- >每个客户端的最新行的那些行.
| 归档时间: |
|
| 查看次数: |
7926 次 |
| 最近记录: |