狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL語句如何實現今日、昨日、前日、本周、上周、本月、上月、本季、上季、本年、上年?

admin
2024年1月23日 12:51 本文熱度 709

在數據分析從數倉取數的過程中,我們經常需要根據不同的時間段對數據指標進行篩選和查詢,比如今日、昨日、前日、本周、上周、本月、上月、本季、上季、本年、上年等。

接下來,分享我日常常用的SQL語句。

為了避免時間的跨年情況,我在文章的4.本周部分列舉了一個網上能搜索到的其他寫法,如果寫定期SQL腳本提取數據,不建議!

什么是時間的跨年情況?

比如現在是2024-01-18,獲取本周的函數用WEEKOFYEAR,得到的結果是3,2023-01-18得到的結果也是3,那么在一個時間范圍比較大或者含歷史全量數據的表中取本周的數據,可能將之前年份的周數據也都取了,導致數據不準確。

假設表中的日期字段為day_key,且格式為YYYY-MM-DD:

1.今日

SELECT * FROM table WHERE DATE(time_column) = current_date;


2.昨日

SELECT * FROM table WHERE DATE(time_column) = current_date - 1;


3.前日

SELECT * FROM table WHERE DATE(time_column) = current_date - 2;


4.本周

-- 方式一
SELECT * FROM table WHERE date_trunc('week',date(day_key)) = date_trunc('week',current_date); 
-- 方式二
SELECT * FROM table WHERE subdate(date(day_key),weekday(date(day_key))) = subdate(date(current_date),weekday(date(current_date))); 
-- 網絡常搜到以下寫法,但我不建議,會遇到文章開頭說的跨年的數據問題
SELECT * FROM table WHERE WEEKOFYEAR(day_key) = WEEKOFYEAR(current_date);

       

5.上周

-- 方式一
SELECT * FROM table WHERE date_trunc('week',date(day_key)) = (date_trunc('week',current_date) - interval '1 week'); 
-- 方式二,將一周的日期都轉化為該日期對應周的第一天
SELECT * FROM table WHERE subdate(date(day_key),weekday(date(day_key))) = subdate(date(current_date),weekday(date(current_date))) - INTERVAL '1' week;


6.本月

-- 方式一
SELECT * FROM table WHERE date_trunc('month',date(day_key)) = date_trunc('month',current_date); 
-- 方式二
SELECT * FROM table WHERE substring(day_key,0,8) = substring(current_date,0,8);


7.上月

-- 方式一
SELECT * FROM table WHERE date_trunc('month',date(day_key)) = (date_trunc('month',current_date) - interval '1 month'); 
-- 方式二
SELECT * FROM table WHERE substring(day_key,0,8) = substring(DATE_SUB(NOW(), INTERVAL '1' MONTH),0,8);


8.本季

-- 方式一
SELECT * FROM table WHERE date_trunc('quarter',date(day_key)) = date_trunc('quarter',current_date); 
-- 方式二
SELECT * FROM table WHERE  concat(year(day_key),'-Q',quarter(day_key)) = concat(year(current_date),'-Q',quarter(current_date));
SELECT * FROM table WHERE  concat(year(day_key),'-Q',quarter(day_key)) = concat(year(current_date),'-Q',quarter(current_date));


9.上季

-- 方式一
SELECT * FROM table WHERE date_trunc('quarter',date(day_key)) = (date_trunc('quarter',current_date) - interval '3 month'); 
-- 方式二
SELECT * FROM table WHERE concat(year(day_key),'-Q',quarter(day_key)) = concat(year(current_date - INTERVAL '1' quarter),'-Q',quarter(current_date - INTERVAL '1' quarter));


10.本年

-- 方式一
SELECT * FROM table WHERE extract( year from date(day_key)) = extract( year from current_date);     
-- 方式二
SELECT * FROM table WHERE YEAR(time_column) = YEAR(NOW());


11.上年

-- 方式一
SELECT * FROM table WHERE extract( year from date(day_key)) = extract( year from current_date); 
-- 方式二
SELECT * FROM table WHERE YEAR(time_column) = YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR));

date_trunc函數很好用,適用于PostgreSQL或者一些企業自研的云數據庫,比如華為云的GAUSSDB等。但是MySQL不支持。所以使用MySQL的小伙伴可以試試上述的方式二。    

以上就是如何通過SQL語句來篩選和查詢不同時間段的數據,希望對你的數據分析工作有所幫助,也歡迎各位一起交流,探討更高效、簡潔的實現上述效果的SQL寫法。


該文章在 2024/1/23 12:51:45 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved