kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Stored procedures/sp_GetElozoOranHianyzottTanulok.sql
2024-03-13 00:33:46 +01:00

58 lines
No EOL
2.2 KiB
Transact-SQL

-- =============================================
-- Author: Dőrr Tamás
-- Create date: 2017.02.24.
-- Description: Visszaadja, hogy megy diákok hiányoztak az aktuális tanítási óra előtti órájukról
-- =============================================
DROP PROCEDURE IF EXISTS sp_GetElozoOranHianyzottTanulok
GO
CREATE PROCEDURE [sp_GetElozoOranHianyzottTanulok]
@OsztalyCsoportId int
,@Datum datetime
,@OraKezdete datetime
,@HianyzasTipus int
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #OsztalyTanuloi (TanuloId int)
INSERT INTO #OsztalyTanuloi (TanuloId)
SELECT C_TANULOID
FROM T_TANULOCSOPORT
WHERE C_OSZTALYCSOPORTID = @OsztalyCsoportId
AND C_BELEPESDATUM <= @Datum AND ISNULL(C_KILEPESDATUM, GETDATE()) > @Datum
AND TOROLT = 'F'
CREATE TABLE #Temp (
TanuloId int
,Tipus int
,Orakezdete datetime
)
INSERT INTO #Temp (TanuloId, Tipus, Orakezdete)
SELECT
ot.TanuloId as TanuloId
,tm.C_TIPUS as Tipus
,tn.C_ORAKEZDETE AS Orakezdete
FROM (
SELECT
tcs2.C_OSZTALYCSOPORTID AS ID
,tcs2.C_TANULOID
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_TANULOCSOPORT_OSSZES tcs2 ON tcs2.C_TANULOID = tcs.C_TANULOID
INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = tcs.C_TANEVID AND tanev.TOROLT = 'F'
WHERE tcs.C_OSZTALYCSOPORTID = @OsztalyCsoportId
AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP)
AND tcs2.C_BELEPESDATUM <= GETDATE() AND (tcs2.C_KILEPESDATUM > GETDATE() OR tcs2.C_KILEPESDATUM IS NULL OR tcs2.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP)
AND tcs.TOROLT = 'F'
AND tcs2.TOROLT = 'F') ocs
INNER JOIN T_TANITASIORA tn ON tn.TOROLT = 'F' AND ocs.ID = tn.C_OSZTALYCSOPORTID AND tn.C_DATUM = @Datum AND tn.C_ORAKEZDETE < @OraKezdete
LEFT JOIN T_TANULOMULASZTAS tm ON tm.TOROLT = 'F' AND tm.C_TANITASIORAKID = tn.ID AND tm.C_TIPUS = @HianyzasTipus AND ocs.C_TANULOID = tm.C_ORATANULOIID
INNER JOIN #osztalytanuloi ot ON ot.TanuloId = ocs.C_TANULOID
SELECT sub.TanuloId
FROM #OsztalyTanuloi ot
OUTER APPLY (SELECT TOP(1) * FROM #Temp t WHERE ot.TanuloId = t.TanuloId ORDER BY Orakezdete DESC) sub
WHERE Tipus = @HianyzasTipus
END
GO