Saya menulis kueri di mana saya harus mendapatkan datanya hanya untuk tahun lalu. Apa cara terbaik untuk melakukannya?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
sql
sql-server
database
tsql
Josh Mein
sumber
sumber
Saya menemukan halaman ini saat mencari solusi yang akan membantu saya memilih hasil dari tahun kalender sebelumnya. Sebagian besar hasil yang ditunjukkan di atas tampaknya mengembalikan item dari 365 hari terakhir, yang tidak berfungsi untuk saya.
Pada saat yang sama, itu memberi saya arahan yang cukup untuk menyelesaikan kebutuhan saya dalam kode berikut - yang saya posting di sini untuk orang lain yang memiliki kebutuhan yang sama dengan saya dan yang mungkin menemukan halaman ini untuk mencari solusi.
Terima kasih kepada mereka di atas yang solusinya membantu saya mencapai apa yang saya butuhkan.
sumber
Nah, saya pikir ada sesuatu yang hilang di sini. Pengguna ingin mendapatkan data dari tahun lalu dan bukan dari 365 hari terakhir. Ada perbedaan besar. Menurut saya, data tahun lalu adalah setiap data tahun 2007 (kalau saya tahun 2008 sekarang). Jadi jawaban yang benar adalah:
Kemudian jika Anda ingin membatasi query ini, Anda dapat menambahkan beberapa filter lain, tetapi selalu mencari di tahun lalu.
sumber
Cari tanggaladd di BOL
sumber
Yang paling mudah dibaca, IMO:
Yang:
Ada varian dengan DATEDIFF dan DATEADD untuk membuat Anda tengah malam hari ini, tetapi mereka cenderung agak tumpul (meskipun sedikit lebih baik pada kinerja - bukan yang Anda perhatikan dibandingkan dengan pembacaan yang diperlukan untuk mengambil data).
sumber
GETDATE () mengembalikan tanggal dan waktu saat ini .
Jika tahun lalu dimulai pada tengah malam hari ini tahun lalu (seperti dalam contoh asli) Anda harus menggunakan sesuatu seperti:
sumber
Saran lainnya bagus jika Anda memiliki "SQL saja".
Namun saya menyarankan, bahwa - jika mungkin - Anda menghitung tanggal dalam program Anda dan memasukkannya sebagai string dalam kueri SQL.
Setidaknya untuk tabel besar (yaitu beberapa juta baris, mungkin digabungkan dengan gabungan) yang akan memberi Anda peningkatan kecepatan yang cukup karena pengoptimal dapat bekerja dengan lebih baik.
sumber
argumen untuk fungsi DATEADD:
datepart dapat berupa: yy, qq, mm, dy, dd, wk, dw, hh, mi, ss, ms
number adalah ekspresi yang dapat diselesaikan ke int yang ditambahkan ke datepart of date
date adalah ekspresi yang bisa diselesaikan menjadi nilai waktu, tanggal, waktu kecil, tanggal waktu, tanggal2, atau waktu offset.
sumber
sumber
Saya, seperti @DE White, datang ke sini karena alasan yang sama tetapi berbeda dari pertanyaan aslinya. Pertanyaan asli menanyakan 365 hari terakhir. Jawaban @ samjudson menyatakan hal itu. Jawaban @DE White mengembalikan hasil untuk tahun kalender sebelumnya.
Kueri saya sedikit berbeda karena berfungsi untuk tahun sebelumnya hingga dan termasuk tanggal saat ini:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Misalnya, pada 17 Feb 2017, kueri ini mengembalikan hasil dari 1/1/2016 hingga 2/17/2017
sumber
Saya memiliki masalah serupa tetapi pembuat kode sebelumnya hanya memberikan tanggal dalam format mm-yyyy. Solusi saya sederhana tetapi mungkin terbukti bermanfaat bagi sebagian orang (saya juga ingin memastikan ruang awal dan akhir dihilangkan):
sumber
Untuk beberapa alasan, tidak ada hasil di atas yang berhasil untuk saya.
Ini memilih 365 hari terakhir.
sumber