欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

SQL語句如何實(shí)現(xiàn)今日、昨日、前日、本周、上周、本月、上月、本季、上季、本年、上年?

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

在數(shù)據(jù)分析從數(shù)倉取數(shù)的過程中,我們經(jīng)常需要根據(jù)不同的時(shí)間段對數(shù)據(jù)指標(biāo)進(jìn)行篩選和查詢,比如今日、昨日、前日、本周、上周、本月、上月、本季、上季、本年、上年等。

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

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

什么是時(shí)間的跨年情況?

比如現(xiàn)在是2024-01-18,獲取本周的函數(shù)用WEEKOFYEAR,得到的結(jié)果是3,2023-01-18得到的結(jié)果也是3,那么在一個(gè)時(shí)間范圍比較大或者含歷史全量數(shù)據(jù)的表中取本周的數(shù)據(jù),可能將之前年份的周數(shù)據(jù)也都取了,導(dǎo)致數(shù)據(jù)不準(zhǔn)確。

假設(shè)表中的日期字段為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))); 
-- 網(wǎng)絡(luò)常搜到以下寫法,但我不建議,會(huì)遇到文章開頭說的跨年的數(shù)據(jù)問題
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'); 
-- 方式二,將一周的日期都轉(zhuǎn)化為該日期對應(yīng)周的第一天
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函數(shù)很好用,適用于PostgreSQL或者一些企業(yè)自研的云數(shù)據(jù)庫,比如華為云的GAUSSDB等。但是MySQL不支持。所以使用MySQL的小伙伴可以試試上述的方式二。    

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


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