Welcome to Sign in | Help

Re: Ultimele 2 randuri in coloane

  •  06-26-2012, 2:16 PM

    Re: Ultimele 2 randuri in coloane

    Pp. că prin ultimele două rânduri înțelegi ultimele două înregistrări inserate.
    1) Dacă ai un câmp IDENTITY poți să folosești (demo online):
    CREATE TABLE Produs(
        ID INT IDENTITY(2,2) PRIMARY KEY,
        GrupaID INT NOT NULL,
        Denumire NVARCHAR(50) NOT NULL,
        PretUnitar NUMERIC(9,2) NOT NULL
    );

    INSERT    Produs (GrupaID, Denumire, PretUnitar)
    SELECT    1, 'A', 1.1
    UNION ALL
    SELECT    1, 'BB', 2.2
    UNION ALL
    SELECT    1, 'CCC', 3.3
    UNION ALL
    SELECT    2, 'D', 4.4
    UNION ALL
    SELECT    2, 'EE', 5.5
    UNION ALL
    SELECT    2, 'FFF', 6.6
    UNION ALL
    SELECT    2, 'GGGG', 7.7;

    SELECT    *
    FROM
    (
            SELECT    p.ID,
                    p.GrupaID,
                    p.Denumire,
                    p.PretUnitar,
                    ROW_NUMBER() OVER(PARTITION BY p.GrupaID ORDER BY p.ID DESC) RowNum
            FROM    dbo.Produs p
    ) src
    WHERE    src.RowNum <= 2
    ORDER BY src.ID


    Posibile probleme pot apare dacă sunt inserate valori explicite în câmpul $IDENTITY (vezi SET IDENTITY_INSERT):

    DELETE Produs
    WHERE ID = 2

    SET IDENTITY_INSERT dbo.Produs ON
    INSERT    Produs (ID, GrupaID, Denumire, PretUnitar)
    SELECT    2, 1, '*K*', 1.1
    SET IDENTITY_INSERT dbo.Produs OFF


    2) Dacă ai un câmp CreateDate / DataOraInserare DATETIME NOT NULL DEFAULT GETDATE() atunci poți să folosești
    ROW_NUMBER() OVER(PARTITION BY p.GrupaID ORDER BY p.DataOraInserare DESC, p.ID DESC ) RowNum.
    Pentru că pot apare duplicate în câmpul DataOraInserare mai ai nevoie de un câmp care să-ţi asigure "reproductibilitatea" înregistrărilor astfel sortate şi filtrate.

    Şi în acest caz se pot insera/modifica ușor valori(le) DataOraInserare.
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems