簡體   English   中英

如何在SQL中按日期過濾

[英]How to filter by date in SQL

我正在處理一個SQL問題,其中我需要找出在某些音樂商店中,2008年最暢銷音樂類型的“單位”售出了多少。 有很多表,但是到目前為止,我已經能夠將我需要的大多數信息串在一起。

select 
    music_store.invoice_lines.invoice_id, 
    music_store.invoice_lines.track_id, 
    music_store.invoice_lines.quantity, 
    music_store.invoices.invoice_date, 
    music_store.invoices.id, 
    music_store.tracks.genre_id
from 
    music_store.invoice_lines
inner join
    music_store.invoices on music_store.invoice_lines.invoice_id = music_store.invoices.id
inner join
   music_store.tracks on music_store.tracks.id = music_store.invoice_lines.track_id;

在這里,我需要過濾掉所有未在2008年結束的發票日期,然后找到music_store.tracks.genre_id的模式,找到相應的流派(這是另一個表),然后將所有“數量”值。

我該怎么做呢? 我很迷茫,而且還是SQL的絕對新手,或者幾乎是編程的新手。

編輯:我不知道我正在使用什么DBMS,大概是SQL的最標准版本? 我在Wagon fwiw上運行SQL

在不知道您正在使用的特定RDBMS的情況下,SQL代碼看起來像這樣,以獲得genre_id的模式。 然后,您可以加入流派表中以獲取流派名稱。 希望這會有所幫助。

select music_store.tracks.genre_id, COUNT(1) genre_count
from music_store.invoice_lines

INNER JOIN music_store.invoices
on music_store.invoice_lines.invoice_id = music_store.invoices.id
INNER JOIN music_store.tracks 
on music_store.tracks.id = music_store.invoice_lines.track_id

WHERE YEAR(music_store.invoices.invoice_date) = 2008
GROUP BY music_store.tracks.genre_id
ORDER BY genre_count DESC 
LIMIT 1;

最通用且可能表現最佳(“可保存”)的方法是簡單地指定2個日期,然后在這些日期設置的邊界內選擇記錄。

  WHERE invoices.invoice_date >= '2008-01-01'
  AND invoices.invoice_date < '2009-01-01'

故意將> =與<一起使用,它允許要評估的列具有任何時間單位精度。 同樣,通過避免對數據使用函數,dbms可以在date列上使用索引,並且還可以避免計算每個函數。

由於您沒有指定正在使用的dbms,因此無法預測需要如何指定這些日期文字。 您無需使用to_date()或str_to_date()作為示例

的MySQL

  WHERE invoices.invoice_date >= str_to_date('2008-01-01','%Y-%m-%d')
  AND invoices.invoice_date < str_to_date('2009-01-01','%Y-%m-%d')

甲骨文

  WHERE invoices.invoice_date >= to_date('2008-01-01','yyyy-mm-dd')
  AND invoices.invoice_date < to_date('2009-01-01','yyyy-mm-dd')

T-SQL

  WHERE invoices.invoice_date >= '20080101'
  AND invoices.invoice_date < '20090101'

另請注意,invoices.invoice_date列的實際數據類型將影響適用的功能,並且我假設此列不是看起來像日期/時間值的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM