sql >> Database >  >> RDS >> Sqlserver

Complexe sortering op basis van volgende en vorige records in SQL

Als ik uw vereiste goed begrijp, heeft u enkele delen van parentId en je wilt dat elk deel begint met de letter s die zijn in het vorige deel En eindigen met letter s die zijn in het volgende deel, Zo ja, probeer dit:

;WITH t AS (
    SELECT 
        c.id, 
        c.parentId,
        c.letter,
        dt.parentSeq
    FROM 
        Child c 
        JOIN (
        SELECT 
            ci.parentId, ROW_NUMBER() OVER (ORDER BY p.number) parentSeq
        FROM 
            Child ci
            JOIN
            Parent p ON ci.parentId = p.id
        GROUP BY
            ci.parentId, p.number) dt ON c.parentId = dt.parentId
)
SELECT
    p.number,
    t.letter
FROM 
    t
    JOIN
    Parent p ON t.parentId = p.id
ORDER BY
    p.number,
    CASE WHEN t.letter IN (SELECT ti.letter FROM t ti WHERE ti.parentSeq = t.parentSeq - 1) THEN 0 
        WHEN t.letter IN (SELECT ti.letter FROM t ti WHERE ti.parentSeq = t.parentSeq + 1) THEN 2 
        ELSE 1 END,
    t.letter


  1. Kan php-mysqli-extensie niet installeren op Centos

  2. PostgresSQL 9.5 Installatie mislukt:“database cluster initialisatie mislukt” MAC os (big sur 11.4)

  3. Meteoor.js gebruiken met php-serverkant

  4. MyBatis, hoe krijg ik de automatisch gegenereerde sleutel van een insert? [MijnSql]