Sql server 按客户名称分组
如果我在“2013-10-29”上搜索,我必须显示列访问的最大日期,然后记录显示这些客户在列中有日期“2013-10-29”。我必须显示客户的最大日期 它的所有功能都很好,但是如何按PID进行分组(对于给定的搜索,我必须只显示一条记录)这将起作用:Sql server 按客户名称分组,sql-server,Sql Server,如果我在“2013-10-29”上搜索,我必须显示列访问的最大日期,然后记录显示这些客户在列中有日期“2013-10-29”。我必须显示客户的最大日期 它的所有功能都很好,但是如何按PID进行分组(对于给定的搜索,我必须只显示一条记录)这将起作用: SELECT DISTINCT P_Master.P_Name, (SELECT MAX(Visit_Date) FROM P_Visit v WHERE v.PID = p_Master.PID) as Visit_Date FRO
SELECT DISTINCT
P_Master.P_Name,
(SELECT MAX(Visit_Date) FROM P_Visit v WHERE v.PID = p_Master.PID) as Visit_Date
FROM P_Master
LEFT JOIN P_VISIT
ON P_Master.PID=P_VISIT.PID
WHERE P_Master.P_Name LIKE 'j%'
请尝试下面的查询,这也将有助于分页
SELECT ROW_NUMBER() OVER (ORDER BY Visit_Date DESC,P_Name ASC) AS RowNumber, *
FROM (SELECT DISTINCT P_Master.P_Name,
(SELECT MAX(Visit_Date) FROM P_Visit v WHERE v.PID = p_Master.PID) as Visit_Date
FROM P_Master
LEFT JOIN P_VISIT
ON P_Master.PID=P_VISIT.PID
WHERE P_Master.P_Name LIKE 'j%') tbl
我还必须得到行数,这就是为什么记录会重复。您不能有一个值和一个行号。需要选择DISTINCT并添加行号ROW\u NUMBER给出值1和2,您不能使用DISTINCT。你需要它做什么?但是你有其他数据以这种方式复制。每个行号只有一条记录。
SELECT ROW_NUMBER() OVER (ORDER BY Visit_Date DESC,P_Name ASC) AS RowNumber, *
FROM (SELECT DISTINCT P_Master.P_Name,
(SELECT MAX(Visit_Date) FROM P_Visit v WHERE v.PID = p_Master.PID) as Visit_Date
FROM P_Master
LEFT JOIN P_VISIT
ON P_Master.PID=P_VISIT.PID
WHERE P_Master.P_Name LIKE 'j%') tbl