Sql server SQL语句中的唯一vs MAX
我有一个有三列的表:Sql server SQL语句中的唯一vs MAX,sql-server,Sql Server,我有一个有三列的表: PERSON VISITOR DATE 该表基本上是一个事务表。以下是事实: 每人有多行 每个访问者有多行 给定的人员/访客组合有多行 假定唯一的人员/日期组合 我需要的是 我希望每个人的最大日期的访客 输出中不能有多个人 人必须是独一无二的 参观者可以重复 我试过: SELECT ROW_NUMBER() OVER (PARTITION BY PERSON, VISITOR ORDER BY Date DESC) row_num, PERSON,
PERSON
VISITOR
DATE
该表基本上是一个事务表。以下是事实:
- 我希望每个人的最大日期的访客
- 输出中不能有多个人
- 人必须是独一无二的
- 参观者可以重复
SELECT
ROW_NUMBER() OVER (PARTITION BY PERSON, VISITOR ORDER BY Date DESC) row_num,
PERSON,
VISITOR as VISITOR
FROM
`TABLE`
ORDER BY
PERSON
也许这个。。。我不确定我是否完全理解这个问题。样本数据/预期结果将有所帮助 您说过您只希望每个最大日期有1名访客,因此行数1将是记录w/最大日期。因为我们是按人划分的,所以如果一个人有3个访客,这并不重要。仅列出此人及其最近的访客
WITH cte as (
SELECT ROW_NUMBER() OVER (PARTITION BY PERSON ORDER BY Date DESC) row_num
, PERSON
, VISITOR as VISITOR
FROM `TABLE`)
SELECT *
FROM cte
WHERE row_Num = 1
我认为这也可以通过交叉应用来实现,尽管我还不太擅长使用它们
SELECT A.Person, A.Visitor, A.Date
FROM table A
CROSS APPLY (SELECT TOP 1 *
FROM TABLE B
WHERE A.Person = B.Person
and A.Visitor = B.Visitor
and A.Date = B.Date
ORDER BY DATE DESC) C
本质上,内部查询为外部查询上的每个记录运行;因此,将只返回最上面的记录,从而返回最新的日期。也许这。。。我不确定我是否完全理解这个问题。样本数据/预期结果将有所帮助 您说过您只希望每个最大日期有1名访客,因此行数1将是记录w/最大日期。因为我们是按人划分的,所以如果一个人有3个访客,这并不重要。仅列出此人及其最近的访客
WITH cte as (
SELECT ROW_NUMBER() OVER (PARTITION BY PERSON ORDER BY Date DESC) row_num
, PERSON
, VISITOR as VISITOR
FROM `TABLE`)
SELECT *
FROM cte
WHERE row_Num = 1
我认为这也可以通过交叉应用来实现,尽管我还不太擅长使用它们
SELECT A.Person, A.Visitor, A.Date
FROM table A
CROSS APPLY (SELECT TOP 1 *
FROM TABLE B
WHERE A.Person = B.Person
and A.Visitor = B.Visitor
and A.Date = B.Date
ORDER BY DATE DESC) C
本质上,内部查询为外部查询上的每个记录运行;因此,只返回最上面的记录,即最新的日期。我的英语读写能力较弱。 我认为答案可能是:
SELECT `PERSON`, `VISITOR`, MAX(`DATE`) AS `DATE`
FROM `TABLE`
GROUP BY `PERSON`, `VISITOR`;
我的英语读写能力很弱。 我认为答案可能是:
SELECT `PERSON`, `VISITOR`, MAX(`DATE`) AS `DATE`
FROM `TABLE`
GROUP BY `PERSON`, `VISITOR`;
谢谢XQbert。它回答了我的问题,给了我一些其他的东西来学习。非常感谢,谢谢。它回答了我的问题,给了我一些其他的东西来学习。非常感谢。我不认为你想同时按人和访客分组,人是唯一的,意味着每人一行。我不认为你想同时按人和访客分组,人是唯一的,意味着每人一行。