Sql server 按客户名称分组

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

如果我在“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
  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