Mysql 每组最大时间戳

Mysql 每组最大时间戳,mysql,hive,hiveql,Mysql,Hive,Hiveql,我有一个相当简单的表格命名作业 创建表如果不存在分配h_id bigint、国家/地区字符串、p_名称字符串 每个h_id有一行: 插入到表分配中 值19874,法国,示例名称, 21548,法国,例如, 34569,德国,不同的名字, 47337,希腊,另一个名字, 54682,希腊,示例名称 64963,法国,不同名称; 我想将赋值联接到第二个表,状态: 如果不存在,则创建表state id bigint、xml_id bigint、datetime_in string、datetime_o

我有一个相当简单的表格命名作业

创建表如果不存在分配h_id bigint、国家/地区字符串、p_名称字符串 每个h_id有一行:

插入到表分配中 值19874,法国,示例名称, 21548,法国,例如, 34569,德国,不同的名字, 47337,希腊,另一个名字, 54682,希腊,示例名称 64963,法国,不同名称; 我想将赋值联接到第二个表,状态:

如果不存在,则创建表state id bigint、xml_id bigint、datetime_in string、datetime_out string xml_id是具有h_id的连接键,状态中每个h_id有多行

插入到表状态 数值1198742014-04-03 10:38:31.012017-11-30 10:45:00.0, 2, 19874, 2014-02-05 10:21:33.0, 2019-02-02 10:30:35.0, 3198742019-02-26 14:34:17.0,空, 4546822019-03-0714:43:34.0,空, 5546822019-02-2510:47:09.0,空 6, 64963, 2019-02-06 12:50:05.0, 2019-05-04 16:15:08.0; 我想要的输出是来自赋值的数据,其中最新的datetime_处于from状态

以下是我尝试过的:

在中选择xml\u id、datetime\u 从选择*, 分区上的稠密秩按xml\u id排序按日期时间\u在DESC as秩中排序 来自s州 其中s.xml_id在从分配中选择a.h_id 临时雇员 其中秩=1 问题是,尽管作业中有约7k行,但我只返回了约2k行

如果我这样做:

从状态s中选择计数* 其中s.xml_id在从分配中选择a.h_id 我得到了~8k个结果。我希望每个a.h_id的状态中有多行。但是,我不明白为什么我在尝试从分配中获取最新的datetime_时只获得了~2k行。

分配表中的一些键在状态表中不存在,两个表中似乎只有2k个键

还请选中此查询以查找仅存在于分配中的键:

SELECT a.h_id 
  FROM assignment a 
       left join (select distinct s.xml_id from state s) s on  a.h_id =  s.xml_id
 WHERE s.xml_id is null;
如果状态表可以包含许多具有相同时间戳的记录,则稠密列组将为具有相同时间戳xml\U id的所有记录分配1。如果您只需要一条记录,则使用行号。如果您需要分配中的所有记录,即使状态表中不存在相应的记录,也可以使用左联接。如果只需要两个表中存在的键,请将左连接替换为内连接:

select a.*, s.*
  from assignment a
       left join (SELECT s.*,
                        row_number() over (partition by xml_id ORDER BY datetime_in DESC) as rn
                   FROM state s
                 ) s on s.xml_id = a.h_id and s.rn=1
状态表中不存在分配表中的某些键,两个表中似乎只存在2K个键

还请选中此查询以查找仅存在于分配中的键:

SELECT a.h_id 
  FROM assignment a 
       left join (select distinct s.xml_id from state s) s on  a.h_id =  s.xml_id
 WHERE s.xml_id is null;
如果状态表可以包含许多具有相同时间戳的记录,则稠密列组将为具有相同时间戳xml\U id的所有记录分配1。如果您只需要一条记录,则使用行号。如果您需要分配中的所有记录,即使状态表中不存在相应的记录,也可以使用左联接。如果只需要两个表中存在的键,请将左连接替换为内连接:

select a.*, s.*
  from assignment a
       left join (SELECT s.*,
                        row_number() over (partition by xml_id ORDER BY datetime_in DESC) as rn
                   FROM state s
                 ) s on s.xml_id = a.h_id and s.rn=1

这个数字是5775。我想5775大概是我的2k和预期的8k之间的差异。我还想验证我的查询是否按预期进行?i、 e.为每个记录提供正确的时间戳。希望我做得正确,我只是没有考虑到一些丢失的钥匙。这给出了5775的计数。我想5775大概是我的2k和预期的8k之间的差异。我还想验证我的查询是否按预期进行?i、 e.为每个记录提供正确的时间戳。希望我做得正确,我只是没有考虑到一些丢失的钥匙。