Saya memiliki tabel bernama Dates, katakan saja dengan dua kolom untuk tujuan kesederhanaan. Satu diberi label "tanggal" dan kolom itu bertipe data tanggal, dan yang lainnya diberi label stempel waktu dan diberi label sebagai tipe data stempel waktu.

Untuk program saya, pengguna memilih tanggal untuk melakukan pemesanan. Setiap kali saya memesan, saya menambahkan stempel waktu ke objek pemesanan saya. Dengan cara ini, saya dapat melacak pemesanan mana yang lebih dulu atau tidak.

Jadi apa yang ingin saya lakukan? Yah pada dasarnya saya ingin hasil pertama dari tanggal di mana stempel waktu datang lebih dulu.

Katakanlah saya memiliki tabel seperti ini:

Date          Timestamp
11/2/2019     50
11/2/2019     20
11/1/2019     10

Dan saya ingin memilih tanggal 11/2/2019 dan kode SQL saya akan mengembalikan nilai yang dimasukkan pertama kali ini, yang merupakan entri tengah.

Jadi SQL saya harus mengembalikan ini:

Date          Timestamp
11/2/2019     20

Bagaimana saya menulis SQL untuk mendapatkan entri paling awal dari tanggal tertentu mengingat ada stempel waktu yang menyertainya.

Inilah yang saya miliki sejauh ini:

SELECT*FROM DATES WHERE Date=? ORDER BY timestamp LIMIT 1

Tapi saya mendapatkan kesalahan sintaks. Bagaimana saya menulis ulang kueri ini untuk mendapatkan entri pertama berdasarkan nilai stempel waktu?

0
Johnny Robertson 20 November 2020, 05:26

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan agregasi:

select date, min(timestamp)
from dates
group by date;

Jika Anda menginginkan kolom lain, satu metode adalah subquery yang berkorelasi:

select d.*
from dates d
where d.timestamp = (select min(d2.timestamp) 
                     from dates d2
                     where d2.date = d.date
                    );

Jika data Anda memiliki waktu minimum duplikat, ini akan mengembalikan semuanya.

Atau row_number():

select d.*
from (select d.*,
             row_number() over (partition by date order by timestamp) as seqnum
      from dates d
     ) d
where seqnum = 1;

Ini mengembalikan satu baris ketika ada duplikat. Jika Anda menginginkan semuanya, gunakan rank() sebagai gantinya.

1
Gordon Linoff 20 November 2020, 02:47