Exemplul urmator poate fi utilizat pentru analiza statistica a seriilor de numere
extrase la loto 6 din 49 pe parcursul mai multor ani.
Pentru a rula exemplul se vor executa urmatorii pasi:
1. Crearea tabelei cu cele 49 de numere
CREATE TABLE [numere]
(
NR SMALLINT NOT NULL ,
PRIMARY KEY CLUSTERED (NR)
)
Pentru a insera cele 49 de numere se utilizeaza script-ul:
DECLARE @i SMALLINT
SET @i = 1
WHILE @i < 50
BEGIN
INSERT INTO [numere] VALUES (@i)
SET @i =@i + 1
END
2. Tabela cu extragerile
CREATE TABLE [loto]
(
[Data] SMALLDATETIME NOT NULL ,
[n1] SMALLINT NULL ,
[n2] SMALLINT NULL ,
[n3] SMALLINT NULL ,
[n4] SMALLINT NULL ,
[n5] SMALLINT NULL ,
[n6] SMALLINT NULL ,
CONSTRAINT [PK_loto] PRIMARY KEY CLUSTERED([Data])
)
Fisierul cu extragerile loto de la 01 ianuarie 1998 pana in august 2002:
loto.txt (datele din acest fisier sunt reale!!!).
Pentru a insera date in tabela [loto] se download-eaza fisierul loto.txt,
apoi se ruleaza scriptul urmator:
BULK INSERT bd_name.dbo.loto
FROM 'C:\loto\loto.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Pentru a vedea datele din tabela [loto]:
SELECT * FROM [loto].
3. Exemplu de procedura stocata pentru analiza datelor
CREATE PROCEDURE spGetAparitii
@StartDate AS DATETIME,
@ENDDate AS DATETIME
AS
SELECT Data, n1, n2, n3, n4, n5, n6 INTO #temp
FROM loto
WHERE (@StartDate <= CONVERT(varchar(10), Data, 111)) AND (CONVERT(varchar(10), Data, 111) < @ENDDate)
SELECT NR, aparitii = poz1 + poz2 + poz3 + poz4 + poz5 + poz6
FROM
(
SELECT
NR = N.NR,
poz1 = CASE WHEN A.aparitii IS NULL THEN 0 ELSE A.aparitii END,
poz2 = CASE WHEN B.aparitii IS NULL THEN 0 ELSE B.aparitii END,
poz3 = CASE WHEN C.aparitii IS NULL THEN 0 ELSE C.aparitii END,
poz4 = CASE WHEN D.aparitii IS NULL THEN 0 ELSE D.aparitii END,
poz5 = CASE WHEN E.aparitii IS NULL THEN 0 ELSE E.aparitii END,
poz6 = CASE WHEN F.aparitii IS NULL THEN 0 ELSE F.aparitii END
FROM
(
SELECT NR
FROM numere
) AS N
LEFT OUTER JOIN
(
SELECT n1, aparitii =COUNT(n1)
FROM #temp
GROUP BY n1
) AS A
ON N.NR = A.n1
LEFT OUTER JOIN
(
SELECT n2, aparitii =COUNT(n2)
FROM #temp
GROUP BY n2
) AS B
ON N.NR = B.n2
LEFT OUTER JOIN
(
SELECT n3, aparitii =COUNT(n3)
FROM #temp
GROUP BY n3
) AS C
ON N.NR = C.n3
LEFT OUTER JOIN
(
SELECT n4, aparitii =COUNT(n4)
FROM #temp
GROUP BY n4
) AS D
ON N.NR = D.n4
LEFT OUTER JOIN
(
SELECT n5, aparitii =COUNT(n5)
FROM #temp
GROUP BY n5
) AS E
ON N.NR = E.n5
LEFT OUTER JOIN
(
SELECT n6, aparitii =COUNT(n6)
FROM #temp
GROUP BY n6
) AS F
ON N.NR = F.n6
) AS P
DROP TABLE #temp
GO
Această procedură returnează numărul de apariţii ale fiecărui număr extras
pe intervalul de timp specificat.
Exemplu de utilizare:
spGetAparitii '1998/01/01', '2002/12/31'
|
NR
|
aparitii
|
|
1
|
26
|
|
2
|
26
|
|
3
|
27
|
|
...
|
|