Autor Zpráva
R2D2
Profil *
Ahoj lidi,
rád bych Vás požádal o radu.
Mám poměrně jednoduchý SQL dotaz:
SELECT id,start_time,end_time,result,name
  FROM [db].[newTable]
  WHERE name LIKE 'job_%' AND ( DATEDIFF(HOUR, end_time, GETDATE()) <= 24 OR end_time = '1900-01-01 00:00:00.000' )
  ORDER BY name, start_time DESC

Funguje, ale občas vrátí pro jedno ID dva a více řádků se stejným name. Šel by tento dotaz nějak upravit/předělat tak, aby v případě duplicitního name vrátil jenom ten novější (=vyšší ID)?
Nebo to už budu muset řešit na úrovni aplikace?

Nejsem úplně SQL odborník, i přesto jsem se snažil podle Googlu něco vymyslet, ale bez úspěchu.

Díky,
T.
Keeehi
Profil
ID je unikátní? Pak je nemožné aby se ve výsledku objevilo vícekrát. To by se mohlo stát jen v případě, že by jsi tu tabulku spojoval s jinou, ale toto není ten případ.

Nejlepší bude, pokud vyrobíš ukázku dat co jsou v tabulce na kterých pokud spustíš tento dotaz, tak to vrátí špatný výsledek.
Kajman
Profil
R2D2:
Pokud jste se přepsal a dotaz vrací více různých ID pro stejné name, tak snad půjde něco takového

SELECT id,
       start_time,
       end_time,
       result,
       [name]
FROM   [db].[newtable]
WHERE  id IN(SELECT Max(id) maxid
             FROM   [db].[newtable]
             WHERE  [name] LIKE 'job_%'
                    AND ( Datediff(hour, end_time, Getdate()) <= 24
                           OR end_time = '1900-01-01 00:00:00.000' )
             GROUP  BY [name])
ORDER  BY [name],
          start_time DESC

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: