有人能帮我翻译成postgresql吗?
我对SQL非常陌生,我不太了解如何在不同的DBMS中编写代码。我正试图在我们学校的MOODLE平台上编写一份报告,该平台使用postgresql,使用找到的可配置报告。但是,该代码在postgresql中不起作用。特别是,如何使用@prevtime:=等变量赋值重写这些行,以使代码在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'
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中,程序由一条语句组成。没有变量或赋值。没有过程处理和执行线程。您或多或少地描述了所需的结果,并让数据库解决其余问题。