sql >> Databáze >  >> RDS >> Sqlserver

Komplexní řazení na základě dalších a předchozích záznamů v SQL

Pokud dobře rozumím vašemu požadavku, máte některé části parentId a chcete, aby každá část začínala letter Jsou v předchozí části a končí letter Jsou v další části, pokud ano, zkuste toto:

;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. Ekvivalent Postgresql GROUP_CONCAT?

  2. Jak funguje justify_interval() v PostgreSQL

  3. Jak přeskočit intervaly překrývání v následujícím dotazu, abyste získali přesný čas sledování za den

  4. MariaDB JSON_CONTAINS_PATH() Vysvětleno