﻿/*
  Csak üres (1817) mulasztások - a legkorábbi maradjon
  Hiányzás (1500) + üres (1817) (vagy fordítva) - A hiányzás maradjon
  Késés (1499) + Késés (1499) esetén egybe összeadni a kettő értékét, ha minkettő igazolt vagy igazolatlan, ha különböző akkor az igazoltat hagyjuk meg
  Késés (1499) + hiányzás (1500) (vagy fordítva) - hiányzás maradjon
  N * Hiányzás (1500) - Legkorábbi igazolt ha van, egyébként a legkorábbi
*/

DROP TABLE IF EXISTS #tmp
SELECT tm.ID,x.*,dib.C_NAME 
INTO #tmp
FROM(
SELECT 
   C_ORATANULOIID
  ,C_TANITASIORAKID
FROM T_TANULOMULASZTAS tm

WHERE tm.TOROLT='F'
GROUP BY C_ORATANULOIID,C_TANITASIORAKID
HAVING COUNT(*)>1) x
  INNER JOIN T_TANULOMULASZTAS tm ON tm.TOROLT='F' AND tm.C_ORATANULOIID = x.C_ORATANULOIID AND tm.C_TANITASIORAKID = x.C_TANITASIORAKID
  INNER JOIN T_DICTIONARYITEMBASE dib ON dib.ID=tm.C_TIPUS AND dib.C_TANEVID=tm.C_TANEVID

DROP TABLE IF EXISTS #mulasztasok
SELECT 
    Count(*) db
   ,STUFF((SELECT DISTINCT ', ' + C_NAME FROM #tmp WHERE #tmp.C_ORATANULOIID=t.C_ORATANULOIID AND #tmp.C_TANITASIORAKID=t.C_TANITASIORAKID FOR XML PATH('')), 1, 1, '') type
   ,C_ORATANULOIID
   ,C_TANITASIORAKID
   INTO #mulasztasok
FROM #tmp t
GROUP BY C_ORATANULOIID,C_TANITASIORAKID
--================1. Csak üres (1817) mulasztások - a legkorábbi maradjon=========================
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
SELECT ID FROM(
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
  INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
WHERE m.type = ' Üres') x WHERE x.rn>1)
--================2. Hiányzás (1500) + üres (1817) (vagy fordítva) - A hiányzás maradjon=========================
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
SELECT ID FROM(
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_TIPUS, tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
  INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
WHERE m.type = ' Hiányzás, Üres') x WHERE x.rn>1)
--================3. Késés (1499) + Késés (1499) esetén egybe összeadni a kettő értékét, ha minkettő igazolt vagy igazolatlan, ha különböző akkor az igazoltat hagyjuk meg=========================
UPDATE tm SET C_KESESPERCBEN = szum FROM (
SELECT SUM(C_KESESPERCBEN) szum,tm.C_ORATANULOIID,tm.C_TANITASIORAKID,ISNULL(tm.C_IGAZOLT,'-') C_IGAZOLT FROM #mulasztasok m
  INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID = m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
WHERE m.type = ' Késés'
GROUP BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID,ISNULL(tm.C_IGAZOLT,'-')) x
  INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=x.C_ORATANULOIID AND tm.C_TANITASIORAKID=x.C_TANITASIORAKID AND ISNULL(tm.C_IGAZOLT,'-') = x.C_IGAZOLT AND tm.TOROLT='F'

UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
SELECT ID FROM(
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_IGAZOLT DESC, tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
  INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
WHERE m.type = ' Késés') x WHERE x.rn>1)


--================4. Késés (1499) + hiányzás (1500) (vagy fordítva) - hiányzás maradjon =========================
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
SELECT ID FROM(
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_TIPUS, tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
  INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
WHERE m.type = ' Hiányzás, Késés') x WHERE x.rn>1)
--================5. N * Hiányzás (1500) - Legkorábbi igazolt ha van, egyébként a legkorábbi=========================
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
SELECT ID FROM(
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_IGAZOLT DESC,tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
  INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
WHERE m.type = ' Hiányzás') x WHERE x.rn>1)
--==================INDEX===============================
DROP INDEX IF EXISTS T_TANULOMULASZTAS.NCU_TanuloMulasztas_OratanuloiId_TanitasiOrakid
CREATE UNIQUE INDEX NCU_TanuloMulasztas_OratanuloiId_TanitasiOrakid
ON T_TANULOMULASZTAS(
   C_ORATANULOIID
  ,C_TANITASIORAKID
  )
WHERE TOROLT='F'
WITH (FILLFACTOR = 80)



