日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?

發(fā)布時(shí)間:2025/4/5 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?【題目】

下面是某公司每天的營業(yè)額,表名為“日銷”。“日期”這一列的數(shù)據(jù)類型是日期類型(date)。

請找出所有比前一天(昨天)營業(yè)額更高的數(shù)據(jù)。(前一天的意思,如果“當(dāng)天”是1月,“昨天”(前一天)就是1號)

例如需要返回一下結(jié)果:

【解題思路】

1.交叉聯(lián)結(jié)

首先我們來復(fù)習(xí)一下之前課程《從零學(xué)會sql》里講過的交叉聯(lián)結(jié)(corss join)的概念。

使用交叉聯(lián)結(jié)會將兩個(gè)表中所有的數(shù)據(jù)兩兩組合。如下圖,是對表“text”自身進(jìn)行交叉聯(lián)結(jié)的結(jié)果:

直接使用交叉聯(lián)結(jié)的業(yè)務(wù)需求比較少見,往往需要結(jié)合具體條件,對數(shù)據(jù)進(jìn)行有目的的提取,本題需要結(jié)合的條件就是“前一天”。

2.本題的日銷表交叉聯(lián)結(jié)的結(jié)果(部分)如下。這個(gè)交叉聯(lián)結(jié)的結(jié)果表,可以看作左邊三列是表a,右邊三列是表b。

紅色框中的每一行數(shù)據(jù),左邊是“當(dāng)天”數(shù)據(jù),右邊是“前一天”的數(shù)據(jù)。比如第一個(gè)紅色框中左邊是“當(dāng)天”數(shù)據(jù)(2號),右邊是“前一天”的數(shù)據(jù)(1號)。

題目要求,銷售額條件是:“當(dāng)天” > “昨天”(前一天)。所以,對于上面的表,我們只需要找到表a中銷售額(當(dāng)天)大于b中銷售額(昨天)的數(shù)據(jù)。

3.另一個(gè)需要著重去考慮的,就是如何找到 “昨天”(前一天),這里為大家介紹兩個(gè)時(shí)間計(jì)算的函數(shù)

daffdate(日期1, 日期2): 得到的結(jié)果是日期1與日期2相差的天數(shù)。 如果日期1比日期2大,結(jié)果為正;如果日期1比日期2小,結(jié)果為負(fù)。

例如:日期1(2019-01-02),日期2(2019-01-01),兩個(gè)日期在函數(shù)里互換位置,就是下面的結(jié)果

另一個(gè)關(guān)于時(shí)間計(jì)算的函數(shù)是:

timestampdiff(時(shí)間類型, 日期1, 日期2) 這個(gè)函數(shù)和上面diffdate的正、負(fù)號規(guī)則剛好相反。 日期1大于日期2,結(jié)果為負(fù),日期1小于日期2,結(jié)果為正。

在“時(shí)間類型”的參數(shù)位置,通過添加“day”, “hour”, “second”等關(guān)鍵詞,來規(guī)定計(jì)算天數(shù)差、小時(shí)數(shù)差、還是分鐘數(shù)差。示例如下圖:

【解題步驟】

1.將日銷表進(jìn)行交叉聯(lián)結(jié)

2.選出上圖紅框中的“a.日期比b.日期大一天”

可以使用“diffdate(a.日期, b.日期) = 1”或者“timestampdiff(day, a.日期, b.日期) = -1”,以此為基準(zhǔn),提取表中的數(shù)據(jù),這里先用diffdate進(jìn)行操作。

代碼部分:

elect * from 日銷 as a cross join 日銷 as b on datediff(a.日期, b.日期) = 1;

得到結(jié)果:

3.找出a中銷售額大于b中銷售額的數(shù)據(jù)

where a.銷售額(萬元) > b.銷售額(萬元)

得到結(jié)果:

4.刪掉多余數(shù)據(jù)

題目只需要找銷售額大于前一天的ID、日期、銷售額,不需要上表那么多數(shù)據(jù)。所以只需要提取中上表的ID、日期、銷售額(萬元)列。

結(jié)合一開始提到的兩個(gè)處理時(shí)間的方法,最終答案及結(jié)果如下:

select a.ID, a.日期, a.銷售額(萬元) from 日銷 as a cross join 日銷 as b on datediff(a.日期, b.日期) = 1 where a.銷售額(萬元) > b.銷售額(萬元);

或者

elect a.ID, a.日期, a.銷售額(萬元) from 日銷 as a cross join 日銷 as b on timestampdiff(day, a.日期, b.日期) = -1 where a.銷售額(萬元) > b.銷售額(萬元);

【本題考點(diǎn)】

1)考察邏輯思維能力,可以使用課程《分析方法》中的邏輯樹分析方法將復(fù)雜問題拆解成一個(gè)一個(gè)可以解決的子問題

2)考察多表聯(lián)結(jié)

3)針對時(shí)間的處理語句是在業(yè)務(wù)中經(jīng)常用到的,需要熟練掌握。

4) 尤其考察對不同sql數(shù)據(jù)格式處理的掌握程度,

【舉一反三】

下面是氣溫表,名為weather,date列的數(shù)據(jù)格式為date,請找出比前一天溫度更高的ID和日期

參考答案:

elect a.ID, a.date from weather as a cross join weather as b on datediff(a.date, b.date) = 1 where a.temp > b.temp;

或者:

elect a.ID, a.date from weather as a cross join weather as b on timestampdiff(day, a.date, b.date) = -1 where a.temp > b.temp;

得到結(jié)果:

推薦:如何從零學(xué)會人工智能必備技能:數(shù)據(jù)庫和sql?

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。