A few tips that may help you.
oc:CommandTimeOut := 5 // or 10
Using the following can help to read easy your code:
#xcommand TEXT INTO <v> => #pragma __text|<v>+=%s+HB_EOL();IF <v> == NIL ; <v> := ""; END
TEXT INTO cSql
DECLARE @od_dat DATE = '%od_dat;
DECLARE @do_dat DATE = '%do_dat';
DECLARE @od_dat_p DATE = '%od_dat_p';
DECLARE @do_dat_p DATE = '%do_dat_p';
DECLARE @od_dat_pp DATE = '%od_dat_pp';
DECLARE @do_dat_pp DATE = '%do_dat_pp';
DECLARE @grupa CHAR(2) = '%grupa_var';
WITH memory_table AS (
SELECT
OTPREM.kupac,
SUM(OTPREM_s.kolicina * OTPREM_S.i_CENA) AS Promet2024T
FROM
REJ...OTPREM
JOIN
REJ...OTPREM_s ON OTPREM.veza = OTPREM_s.veza
JOIN
REJ...ROBA ON OTPREM_s.sifra_robe = ROBA.sifra
WHERE
OTPREM.DATUM BETWEEN @od_dat AND @do_dat
AND ROBA.grupa = @grupa
GROUP BY
OTPREM.kupac
), memory_table1 AS (
SELECT
OTPREM.kupac,
SUM(OTPREM_s.kolicina * OTPREM_S.i_CENA) AS Promet2024P
FROM
REJ2024...OTPREM
JOIN
REJ2024...OTPREM_s ON OTPREM.veza = OTPREM_s.veza
JOIN
REJ2024...ROBA ON OTPREM_s.sifra_robe = ROBA.sifra
WHERE
OTPREM.DATUM BETWEEN @od_dat AND @do_dat
AND ROBA.grupa = @grupa
GROUP BY
OTPREM.kupac
), memory_table2 AS (
SELECT
OTPREM.kupac,
SUM(OTPREM_s.kolicina * OTPREM_S.i_CENA) AS Promet2023
FROM
REJ2023...OTPREM
JOIN
REJ2023...OTPREM_s ON OTPREM.veza = OTPREM_s.veza
JOIN
REJ2023...ROBA ON OTPREM_s.sifra_robe = ROBA.sifra
WHERE
OTPREM.DATUM BETWEEN @od_dat_p AND @do_dat_p
AND ROBA.grupa = @grupa
GROUP BY
OTPREM.kupac
), memory_table3 AS (
SELECT
OTPREM.kupac,
SUM(OTPREM_s.kolicina * OTPREM_S.i_CENA) AS Promet2022
FROM
REJ2022...OTPREM
JOIN
REJ2022...OTPREM_s ON OTPREM.veza = OTPREM_s.veza
JOIN
REJ2022...ROBA ON OTPREM_s.sifra_robe = ROBA.sifra
WHERE
OTPREM.DATUM BETWEEN @od_dat_pp AND @do_dat_pp
AND ROBA.grupa = @grupa
GROUP BY
OTPREM.kupac
)
SELECT
KOMINT.sifra AS kupac,
KOMINT.naziv1,
(COALESCE(mt.Promet2024T, 0) + COALESCE(mt1.Promet2024P, 0)) AS Promet2024,
COALESCE(mt2.Promet2023, 0) AS Promet2023,
COALESCE(mt3.Promet2022, 0) AS Promet2022,
(COALESCE(mt.Promet2024T, 0) + COALESCE(mt1.Promet2024P, 0)) - COALESCE(mt2.Promet2023, 0) AS Razlika
FROM
REJ...KOMINT KOMINT
LEFT JOIN
memory_table mt ON KOMINT.sifra = mt.kupac
LEFT JOIN
memory_table1 mt1 ON KOMINT.sifra = mt1.kupac
LEFT JOIN
memory_table2 mt2 ON KOMINT.sifra = mt2.kupac
LEFT JOIN
memory_table3 mt3 ON KOMINT.sifra = mt3.kupac
ORDER BY Razlika;
ENDTEXT
cSql := hb_StrReplace( cSql, { "%od_da't" => od_dat, ;
"%do_dat" => do_dat,;
"%od_dat_p" => od_dat_p,;
"%do_dat_p" => do_dat_p,;
"%od_dat_pp" => od_dat_pp,;
"%do_dat_pp" => do_dat_pp,;
"%grupa_var" => grupa_var} )
//place timer here
nSec := Seconds()
// Why the question mark //?oRs:=oC:Execute(cSql)
oRs:=oC:Execute(cSql)
? Seconds()-nSec //This is your response time
Getting back to the difference in response time:
1. the provider used to connect can make a difference, currently the last provider should be MSOLEDBSQL but this should not make so much difference and my experience using it gives me errors when retrieving images.
2, How are you timing the response time?
Regards,
David Field