Ich stecke ein bisschen bei der Erstellung von Abfragen auf dem API-Server fest. Ich möchte nur mit geänderten Trackdaten antworten. Ich habe eine tracks
Tabelle mit wenigen Spalten wie dieser.
tracks(id, audio_fingerprint, name, creation_date, modified_date)
Jetzt möchte ich nur noch Titel, die nach dem letzten abgerufenen Zeitstempel aktualisiert werden (Array von Audio-Fingerabdrücken und zuletzt abgerufenem Zeitstempel, die als API-Anforderungsparameter übergeben wurden).
SELECT * from tracks WHERE (audio_fingerprint, modified_date) IN (Array(audioFingerprint, > lastFetchedTimestamp));
(^^ Es ist eine ungültige Abfrage, die nur zum Verständnis verwendet wird).
Vielen Dank
Beispieldaten:
create table tracks (audio_fingerprint text, modified_date date);
insert into tracks values
('a', '2017-01-10'),
('b', '2017-01-10'),
('a', '2017-02-10'),
('b', '2017-02-10'),
('c', '2017-02-01');
Platzieren Sie Ihre Argumente in einer with
Abfrage und verknüpfen Sie sie mit Ihrer Tabelle:
with given_values (fingerprint, last_fetched) as (
values
('a', '2017-01-01'::date),
('b', '2017-02-01')
)
select *
from tracks t
join given_values v
on t.audio_fingerprint = v.fingerprint
and t.modified_date > v.last_fetched;
audio_fingerprint | modified_date | fingerprint | last_fetched
-------------------+---------------+-------------+--------------
a | 2017-01-10 | a | 2017-01-01
a | 2017-02-10 | a | 2017-01-01
b | 2017-02-10 | b | 2017-02-01
(3 rows)
Anstelle von CTE können Sie auch eine abgeleitete Tabelle verwenden:
select *
from tracks t
join (
values
('a', '2017-01-01'::date),
('b', '2017-02-01')
) v(fingerprint, last_fetched)
on t.audio_fingerprint = v.fingerprint
and t.modified_date > v.last_fetched;
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen