Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取联接中的最后一个条目_Sql_Sql Server_Greatest N Per Group - Fatal编程技术网

Sql 获取联接中的最后一个条目

Sql 获取联接中的最后一个条目,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我知道这已经被问了很多,但我似乎无法让我的查询工作 我试图在如下所示的查询中为每个id只获取一行: SELECT a.id, b.name FROM table1 a LEFT JOIN table2 b ON a.key = b.key WHERE a.Date = (SELECT MAX(a1.date) from table1 WHERE a1.primarykey = a.primarykey) GROUP BY a.id, b.name 我不需要按b.name分组,但必须按b.na

我知道这已经被问了很多,但我似乎无法让我的查询工作

我试图在如下所示的查询中为每个id只获取一行:

SELECT a.id, b.name
FROM table1 a
LEFT JOIN table2 b ON a.key = b.key
WHERE a.Date = 
(SELECT MAX(a1.date) from table1 WHERE a1.primarykey = a.primarykey)
GROUP BY a.id, b.name
我不需要按b.name分组,但必须按b.name分组,因为我需要按id分组

现在,我有多个b.name出现,它与a.id重复,我只需要a.id的最后日期对应的b.name

有人能告诉我做这件事的正确方法吗


谢谢

如果要从组对账单中删除b.name,则每个id将获得1行

如果按a.id分组,不确定为什么需要按b.name分组?

尝试以下方法:

SELECT a.id, b.name from (
SELECT a1.id,a1.key,
  rank() over(partition by a1.key order by a1.date desc) md FROM table1 a1 )a
LEFT JOIN table2 b ON a.key = b.key and a.md=1;

但我不明白-您需要按Id或密钥分组,请仔细检查它

我猜这种情况:

WHERE a1.primarykey = a.primarykey
应该是:

WHERE a1.key = a.key
不是
表1
的主键,因为如果您真的是指主键,那么就没有必要为主键搜索
MAX(date)
,因为每个主键只有一个日期。
如果我没有错,请尝试使用
行编号()


从语句中删除b.name会给我一个错误“列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”要得到正确的答案,您需要共享两个表中的示例数据以及预期结果(以表格文本形式)。该死,我太傻了。将.primarykey更改为.key实际上解决了这个问题。谢谢!
SELECT t.id, t.name
FROM (
  SELECT a.id, b.name,
    row_number() over (partition by a.key order by a.date desc) rn
  FROM table1 a LEFT JOIN table2 b 
  ON a.key = b.key
) t 
WHERE t.rn = 1