[ errclear @ 03.03.2014. 22:39 ] @
Prvo pozdrav svima.

Ovako imam dve tabele i napisao sam ovaj upit:

Code (sql):
SELECT     MjernoMjestoPK, Grad, Ulica, Lokacija, BrojStanova,
                          (SELECT     MIN(KalorimetarEnergija) AS Expr1
                            FROM          dbo.MonitoringLog AS ml
                            WHERE      (MjernoMjestoFK = mm.MjernoMjestoPK) AND (CONVERT(VARCHAR(10), Datum, 120) >= '2014-02-26') AND (CONVERT(VARCHAR(10), Datum, 120) <= '2014-03-02')) AS EnergijaMIN,
                          (SELECT     MIN(KalorimetarUkupniProtok) AS Expr1
                            FROM          dbo.MonitoringLog AS ml
                            WHERE      (MjernoMjestoFK = mm.MjernoMjestoPK) AND (CONVERT(VARCHAR(10), Datum, 120) >= '2014-02-26') AND (CONVERT(VARCHAR(10), Datum, 120) <= '2014-03-02')) AS ProtokMIN,
                          (SELECT     MAX(KalorimetarEnergija) AS Expr1
                            FROM          dbo.MonitoringLog AS ml
                            WHERE      (MjernoMjestoFK = mm.MjernoMjestoPK) AND (CONVERT(VARCHAR(10), Datum, 120) >= '2014-02-26') AND (CONVERT(VARCHAR(10), Datum, 120) <= '2014-03-02')) AS EnergijaMAX,
                          (SELECT     MAX(KalorimetarUkupniProtok) AS Expr1
                            FROM          dbo.MonitoringLog AS ml
                            WHERE      (MjernoMjestoFK = mm.MjernoMjestoPK) AND (CONVERT(VARCHAR(10), Datum, 120) >= '2014-02-26') AND (CONVERT(VARCHAR(10), Datum, 120) <= '2014-03-02')) AS ProtokMAX,
                          (SELECT     MAX(KalorimetarTrenutnaSnaga) AS Expr1
                            FROM          dbo.MonitoringLog AS ml
                            WHERE      (MjernoMjestoFK = mm.MjernoMjestoPK) AND (CONVERT(VARCHAR(10), Datum, 120) >= '2014-02-26') AND (CONVERT(VARCHAR(10), Datum, 120) <= '2014-03-02')) AS SnagaMAX,
                            (SELECT CONVERT(VARCHAR(19), Datum, 120)
                            FROM          dbo.MonitoringLog AS ml
                            WHERE      (MjernoMjestoFK = mm.MjernoMjestoPK) AND (KalorimetarTrenutnaSnaga = (SELECT MAX(TrenutnaSnaga) FROM MonitoringLog)) AND
                            ((CONVERT(VARCHAR(10), Datum, 120) >= '2014-02-26') AND (CONVERT(VARCHAR(10), Datum, 120) <= '2014-03-02'))) AS DatumSnagaMAX
FROM         dbo.MjernaMjesta AS mm


e sada ovo zadnje gde mi je SnagaMAX treba iz tabele kada stavim raspon datuma da dobijem koja je to MAXSnaga i kada je to bilo, i uopste da li je ovaj upit dobar.

Ako treba jos koja informacija samo recite. Unapred hvala
[ Dusan Kondic @ 04.03.2014. 11:17 ] @
Pretpostavljajući da je polje Datum iz tabele MonitoringLog tipa DateTime, da je u poslednjem ugneždenom SELECT-u polje TrenutnaSnaga u stvari polje KalorimetarTrenutnaSnaga,
kod bi trebao da izgleda otprilike ovako
Code:
DECLARE @DtmOd DATETIME = '2014-02-26'
DECLARE @DtmDo DATETIME = '2014-03-02'

SELECT MjernoMjestoPK, Grad, Ulica, Lokacija, BrojStanova,
(SELECT MIN(ml.KalorimetarEnergija)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS EnergijaMIN,
(SELECT MIN(ml.KalorimetarUkupniProtok)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS ProtokMIN,
(SELECT MAX(ml.KalorimetarEnergija)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS EnergijaMAX,
(SELECT MAX(ml.KalorimetarUkupniProtok)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS ProtokMAX,
(SELECT MAX(ml.KalorimetarTrenutnaSnaga)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS SnagaMAX,
(SELECT TOP 1 ml.Datum
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo AND 
    ml.KalorimetarTrenutnaSnaga = (SELECT MAX(ml1.KalorimetarTrenutnaSnaga)
                                    FROM dbo.MonitoringLog AS ml1
                                    WHERE ml1.MjernoMjestoFK = mm.MjernoMjestoPK AND 
                                    ml1.Datum BETWEEN @DtmOd AND @DtmDo)) AS DatumSnagaMAX
FROM dbo.MjernaMjesta AS mm

Kod sam prekucao napamet jer nemam tabele ali trebalo bi da radi.
TOP 1 sam stavio za slučaj da se ista maksimalna snaga nađe u dva datuma.
Ovo bi moglo da se izvede i JOIN-ovanjem tabela i upotrebom GROUP BY klauzule ali ne mogu da iskucam kod bez baze.
[ errclear @ 04.03.2014. 17:31 ] @
Pozdrav Dusane, da ovaj kod sto si napisao radi upravo ono sto sam hteo.
Sto se tice JOIN-a bio sam pre napravio nesto na tu osnovu ali mi se duze izvrsavalo od ovoga sto sam kasnije kucao.
Ako hoces i imas vremena mogao bi postaviti kod za obadve tabele sa insertima?
[ Dusan Kondic @ 04.03.2014. 18:12 ] @
Da bih iskucao kod za INSERT-e morao bih da znam strukturu tabela.
Probaj sledeću stvar. U Management Studiju u bazi raširi čvor Tables i pronađi tabelu za koju ti je potreban INSERT.
Klikni desnim klikom na tu tabelu i idi na Script Table as > INSERT To > New Query Editor Window
VALUES popuni konkretnim podacima ili parametrima i to je to.
Ako se ne snađeš, opiši tabele za koje su ti potrebni INSERT-i pa ću ti napisati kod (ja, ili neko drugi, nebitno).
Pozdrav
[ errclear @ 04.03.2014. 22:56 ] @
Mozda se nismo dobro razumeli nisam ni mislio da ti napravis insert i tabele ali nema veze. Evo u prilogu sam postavio sql za kreiranje dve tabele i za insertovanje podataka u njih.
[ Dusan Kondic @ 05.03.2014. 08:02 ] @
Evo oba rešenja sa testom brzine izvršavanja:
Code:
DECLARE @DtmOd DATETIME = '2014-02-26'
DECLARE @DtmDo DATETIME = '2014-03-02'

--TABELA ZA TESTIRANJE
DECLARE @T TABLE (
MjernoMjestoPK int NOT NULL,
Grad nvarchar(50) NULL,
Ulica nvarchar(100) NULL,
Lokacija nvarchar(100) NULL,
BrojStanova int NULL,
EnergijaMIN decimal(10, 3) NULL,
ProtokMIN decimal(10, 3) NULL,
EnergijaMAX decimal(10, 3) NULL,
ProtokMAX decimal(10, 3) NULL,
SnagaMAX decimal(10, 2) NULL,
DatumSnagaMAX DATETIME)

DECLARE @I INT
DECLARE @Time DATETIME

SET @I = 1
SET @Time = GETDATE()
WHILE (@I < 10000)
BEGIN
DELETE @T
INSERT INTO @T (MjernoMjestoPK, Grad, Ulica, Lokacija, BrojStanova, EnergijaMIN, ProtokMIN, EnergijaMAX, ProtokMAX, SnagaMAX, DatumSnagaMAX)
SELECT mm.MjernoMjestoPK, mm.Grad, mm.Ulica, mm.Lokacija, mm.BrojStanova,
MIN(ml.KalorimetarEnergija) AS EnergijaMIN,
MIN(ml.KalorimetarUkupniProtok) AS ProtokMIN,
MAX(ml.KalorimetarEnergija) AS EnergijaMAX,
MAX(ml.KalorimetarUkupniProtok) AS ProtokMAX,
MAX(ml.KalorimetarTrenutnaSnaga) AS SnagaMAX,
(SELECT TOP 1 ml1.Datum
    FROM dbo.MonitoringLog AS ml1
    WHERE ml1.MjernoMjestoFK = mm.MjernoMjestoPK AND ml1.Datum BETWEEN @DtmOd AND @DtmDo AND 
    ml1.KalorimetarTrenutnaSnaga = MAX(ml.KalorimetarTrenutnaSnaga)) AS DatumSnagaMAX
FROM MjernaMjesta AS mm
    INNER JOIN MonitoringLog ml ON ml.MjernoMjestoFK = mm.MjernoMjestoPK
WHERE ml.Datum BETWEEN @DtmOd AND @DtmDo
GROUP BY mm.MjernoMjestoPK, mm.Grad, mm.Ulica, mm.Lokacija, mm.BrojStanova

SET @I = @I + 1
END
SELECT GETDATE() - @Time AS TrajanjeSaJOINom

SET @I = 1
SET @Time = GETDATE()
WHILE (@I < 10000)
BEGIN
DELETE @T
INSERT INTO @T (MjernoMjestoPK, Grad, Ulica, Lokacija, BrojStanova, EnergijaMIN, ProtokMIN, EnergijaMAX, ProtokMAX, SnagaMAX, DatumSnagaMAX)
SELECT MjernoMjestoPK, Grad, Ulica, Lokacija, BrojStanova,
(SELECT MIN(ml.KalorimetarEnergija)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS EnergijaMIN,
(SELECT MIN(ml.KalorimetarUkupniProtok)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS ProtokMIN,
(SELECT MAX(ml.KalorimetarEnergija)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS EnergijaMAX,
(SELECT MAX(ml.KalorimetarUkupniProtok)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS ProtokMAX,
(SELECT MAX(ml.KalorimetarTrenutnaSnaga)
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo) AS SnagaMAX,
(SELECT TOP 1 ml.Datum
    FROM dbo.MonitoringLog AS ml
    WHERE ml.MjernoMjestoFK = mm.MjernoMjestoPK AND ml.Datum BETWEEN @DtmOd AND @DtmDo AND 
    ml.KalorimetarTrenutnaSnaga = (SELECT MAX(ml1.KalorimetarTrenutnaSnaga)
                                    FROM dbo.MonitoringLog AS ml1
                                    WHERE ml1.MjernoMjestoFK = mm.MjernoMjestoPK AND 
                                    ml1.Datum BETWEEN @DtmOd AND @DtmDo)) AS DatumSnagaMAX
FROM dbo.MjernaMjesta AS mm

SET @I = @I + 1
END
SELECT GETDATE() - @Time AS TrajanjeSaUgnezdenimSELECTom
GO

Pozdrav