Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 从每个ID获取最后5条记录,不使用限制_Sql_Postgresql_Excel_Vba - Fatal编程技术网

Sql 从每个ID获取最后5条记录,不使用限制

Sql 从每个ID获取最后5条记录,不使用限制,sql,postgresql,excel,vba,Sql,Postgresql,Excel,Vba,我在Excel VBA中使用以下SQL代码从PostGreSQL导入数据: Const sqlconnection=Provider=visoledb; Dim conn作为新连接 conn.ConnectionString=sqlconnection 康涅狄格州公开赛 将遥感器作为记录集 Worksheets.AddAfter:=工作表Worksheets.Count.Name=FR SheetsFR.选择 范围A1.选择 将fr设置为字符串 fr=选择主控id、事件日期、数值结果_ &来自f

我在Excel VBA中使用以下SQL代码从PostGreSQL导入数据:

Const sqlconnection=Provider=visoledb; Dim conn作为新连接 conn.ConnectionString=sqlconnection 康涅狄格州公开赛 将遥感器作为记录集 Worksheets.AddAfter:=工作表Worksheets.Count.Name=FR SheetsFR.选择 范围A1.选择 将fr设置为字符串 fr=选择主控id、事件日期、数值结果_ &来自fr.master_id=p.entity_id和p.auditflag=1上的fr内部联接人员p_ &其中fr.auditflag=1,num_结果不为NULL,num_结果为0_ &由船长发出的命令 设置rs=conn.Executefr 使用ActiveSheet.QueryTables.AddConnection:=rs,目标:=RangeA1 刷新 以 rs.Close 这给了我表中每个人的所有记录值

我已被告知无法使用LIMIT,因此如何将其限制为仅显示每个人的最后5条记录。

使用行号:

我不知道你怎么定义最后5个。指定它的列是什么??参考。

使用行号:


我不知道你怎么定义最后5个。指定它的列是什么??假设一个标准化的数据库,一个到多个连接有不同的人有多个FR记录,并且需要显示给每个人的最后5个记录指示一个时间元素,因此建议F.EngEnter字段,考虑PothGres的窗口函数。< /P> 具体而言,该行编号计算按外键f.masterid分组的记录顺序,即按事件日期降序排列的每个人员id。通过这样的排名,您可以在外部查询的WHERE或ON子句中筛选前5名:

选择t.master\u id、t.eventdate、t.num\u result 从…起 选择fr.master\u id、fr.eventdate、fr.num\u result、, 按fr.master分区上的行号按fr.eventdate DESC按rnk排序 来自fr 其中fr.auditflag=1,fr.num_结果为0,fr.num_结果不为空 As t 内连接人 在t.master_id=p.entity_id和p.auditflag=1上
在T.RNK

假设一个一个到多个连接的具有不同FR记录的不同人的规范化数据库,并且需要显示每个人的最后5个记录时,表示时间元素,因此建议F.ErrestDead字段,考虑PASGRES'的窗口函数。< /P> 具体而言,该行编号计算按外键f.masterid分组的记录顺序,即按事件日期降序排列的每个人员id。通过这样的排名,您可以在外部查询的WHERE或ON子句中筛选前5名:

选择t.master\u id、t.eventdate、t.num\u result 从…起 选择fr.master\u id、fr.eventdate、fr.num\u result、, 按fr.master分区上的行号按fr.eventdate DESC按rnk排序 来自fr 其中fr.auditflag=1,fr.num_结果为0,fr.num_结果不为空 As t 内连接人 在t.master_id=p.entity_id和p.auditflag=1上
其中t.rnk哪个列用于排序记录?哪个列用于排序记录?
SELECT master_id, eventdate, num_result 
FROM fr INNER JOIN
     (SELECT p.*,
             ROW_NUMBER() OVER (PARTITION BY p.entity_id ORDER BY ?? DESC) as seqnum
      FROM person p
     ) p
     ON fr.master_id = p.entity_id AND p.auditflag = 1 AND seqnum <= 5
WHERE fr.auditflag = 1 AND num_result IS NOT NULL AND
      num_result <> 0
ORDER BY master_id;