Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
Scala Slick 2.1.0 GroupBy并获取所有列_Scala_Slick - Fatal编程技术网

Scala Slick 2.1.0 GroupBy并获取所有列

Scala Slick 2.1.0 GroupBy并获取所有列,scala,slick,Scala,Slick,对于下表结构: id externalId name version 1 10 n1 1 2 65 n2 2 3 10 n3 2 4 77 n4 1 我正在尝试获取所有条目(所有列),它们的最大版本都是按externalId分组的。预期结果应该是: id externalId name version 2 65 n2 2 3 10 n3 2 4 77

对于下表结构:

id externalId name version
1  10         n1   1
2  65         n2   2
3  10         n3   2
4  77         n4   1 
我正在尝试获取所有条目(所有列),它们的最大版本都是按externalId分组的。预期结果应该是:

id externalId name version
2  65         n2   2
3  10         n3   2
4  77         n4   1 
为此,我定义了以下slick查询:

val resulting = myTableEntries
 .groupBy(x => x.externalID)
 .map { 
   case (id, group) => 
     (id, group.map(_.version).max) 
 }
我怎样才能得到所有的列,而不仅仅是id和版本

实际上,我需要的是以下SQL的光滑版本:

select myTable.id, myTable.name, myTable.externalId, myTable.version
    from MyTable myTable
    where version = 
        (select max(revision) from MyTable myTable1 where myTable.id=myTable1.id)

我没有在Slick上工作过,但是看看scala代码和您的需求,我想到了下面提到的问题

解决问题的另一种方法是在SQL中使用秩函数,对组中的每个记录进行秩,在您的情况下为外部记录,在您的情况下为版本进行秩

完成后,您可以选择排名为1的所有记录

请参考以下关于如何解决此类案件的问题

基于和,我认为您需要以下内容:

val maxVersionByExternalID = myTableEntries
 .groupBy(x => x.externalID)
 .map { 
   case (externalID, group) => 
     (externalID, group.map(_.version).max)
//We have the pair of ids and max versions _not yet run_ so we can join
val resulting = (myTableEntries join maxVersionByExternalID on (
    (entries, maxPair) => //join condition
       entries.externalID === maxPair._1 && entries.version === maxPair._2))
  .map{case (entries, maxPair) => entries}//keep only the original
  .run //materialize at the end

这不是在SQL中使用
groupby
have
实现的吗?是的,我想在Slick中实现这一点!我不明白!我想做的似乎不一样!结果是什么?我不确定我是否理解你的问题。这与您在原始问题中所写的相同,这将是您要查找的查询结果。唯一不同的是,这里我有
。也运行它。也许你的意图是进一步加入?我使用的是Slick 2.1.0,我的IDE抱怨条目和maxPair无法解析。对不起,我错过了两个括号。希望这样它能起作用。它肯定是一个不平凡的工具。答案对你的问题有效吗?我误解你的问题了吗?还是还有什么问题?(我还没有尝试编译。)