有人能帮我翻译成postgresql吗?

有人能帮我翻译成postgresql吗?,postgresql,Postgresql,我对SQL非常陌生,我不太了解如何在不同的DBMS中编写代码。我正试图在我们学校的MOODLE平台上编写一份报告,该平台使用postgresql,使用找到的可配置报告。但是,该代码在postgresql中不起作用。特别是,如何使用@prevtime:=等变量赋值重写这些行,以使代码在postgresql中工作 下面是链接中的完整代码 SELECT l.id, l.timecreated, DATE_FORMAT(FROM_UNIXTIME(l.timecreated),'%d-%m-%Y'

我对SQL非常陌生,我不太了解如何在不同的DBMS中编写代码。我正试图在我们学校的MOODLE平台上编写一份报告,该平台使用postgresql,使用找到的可配置报告。但是,该代码在postgresql中不起作用。特别是,如何使用@prevtime:=等变量赋值重写这些行,以使代码在postgresql中工作

下面是链接中的完整代码

SELECT 
l.id, 
l.timecreated, 
DATE_FORMAT(FROM_UNIXTIME(l.timecreated),'%d-%m-%Y') AS dTime,
@prevtime := (SELECT MAX(timecreated) FROM mdl_logstore_standard_log 
        WHERE userid = %%USERID%% AND id < l.id ORDER BY id ASC LIMIT 1) AS prev_time,
IF (l.timecreated - @prevtime < 7200, @delta := @delta + (l.timecreated-@prevtime),0) AS sumtime,
l.timecreated-@prevtime AS delta,
"User" AS TYPE
 
FROM prefix_logstore_standard_log AS l, 
(SELECT @delta := 0) AS s_init 
# CHANGE UserID
WHERE l.userid = %%USERID%% AND l.courseid = %%COURSEID%%
%%FILTER_STARTTIME:l.timecreated:>%% %%FILTER_ENDTIME:l.timecreated:<%%

这应该是报告学生在MOODLE课程中花费的时间。

我假设原始查询是为MySQL编写的。您还没有解释查询的实际功能,但是@prevtime hack通常是缺失的一种解决方法,因此很可能可以使用Postgres中的lag来完成,大致如下:

select l.id, 
       l.timecreated, 
       to_char(to_timestamp(l.timecreated), 'dd-mm-yyyy') as dtime, 
       lag(timecreated) over w as prev_time,
       l.timecreated - lag(timecreated) over w as delta,
       'User' as type,
FROM prefix_logstore_standard_log AS l
window w as (partition by userid order by id) 
WHERE l.userid = %%USERID%% 
  AND l.courseid = %%COURSEID%%

在SQL中,程序由一条语句组成。没有变量或赋值。没有过程处理和执行线程。您或多或少地描述了所需的结果,并让数据库解决其余问题。