2016-04-04 2 views
3

Ich habe diese TabelleEquivalent von keep DENSE_RANK für mysql

create table sd_devices (
device_code varchar(128), 
vin varchar(128), 
created_at datetime, 
loaded_at datetime 
) 

Ich möchte für jeden wählen Sie den ersten vin um von created_at ab, loaded_at ab device_code.

In Orakel, hätte ich Gebrauch DENSE_RANK halten, aber hier mit MySQL Ich weiß nicht, wie das zu tun.

Antwort

2

dies sollte es tun:

SELECT DISTINCT device_code, 
     vin 
     FROM (
SELECT sd_devices.* 
FROM sd_devices 
ORDER BY created_at DESC, loaded_at DESC) AS a 
GROUP BY device_code 

In der Unterabfrage wählen Sie alle Zeilen und sie um in der richtigen Reihenfolge, dann in der Außen Abfrage verwenden Sie DISTINCT zu einer doppelten Reihen loszuwerden und es wird das erste verwenden, auf das es trifft. Weil wir es schon in die richtige Reihenfolge bringen, wird es die eine Zeile aufnehmen, die wir wollen.

+0

Autsch, meine Augen bluten. Aber ja, es funktioniert. thx – Steven

+0

; ') es gibt schlechtere/längere Anfragen zu finden: p kein Problem, viel Glück! – Jester

+0

@Jester - Ich glaube, die blutenden Augen waren eher von den Großbuchstaben als von der Länge der Abfrage. {:-) – mathguy

Verwandte Themen