sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?
?【題目】
下面是某公司每天的營業額,表名為“日銷”。“日期”這一列的數據類型是日期類型(date)。
請找出所有比前一天(昨天)營業額更高的數據。(前一天的意思,如果“當天”是1月,“昨天”(前一天)就是1號)
例如需要返回一下結果:
【解題思路】
1.交叉聯結
首先我們來復習一下之前課程《從零學會sql》里講過的交叉聯結(corss join)的概念。
使用交叉聯結會將兩個表中所有的數據兩兩組合。如下圖,是對表“text”自身進行交叉聯結的結果:
直接使用交叉聯結的業務需求比較少見,往往需要結合具體條件,對數據進行有目的的提取,本題需要結合的條件就是“前一天”。
2.本題的日銷表交叉聯結的結果(部分)如下。這個交叉聯結的結果表,可以看作左邊三列是表a,右邊三列是表b。
紅色框中的每一行數據,左邊是“當天”數據,右邊是“前一天”的數據。比如第一個紅色框中左邊是“當天”數據(2號),右邊是“前一天”的數據(1號)。
題目要求,銷售額條件是:“當天” > “昨天”(前一天)。所以,對于上面的表,我們只需要找到表a中銷售額(當天)大于b中銷售額(昨天)的數據。
3.另一個需要著重去考慮的,就是如何找到 “昨天”(前一天),這里為大家介紹兩個時間計算的函數
daffdate(日期1, 日期2): 得到的結果是日期1與日期2相差的天數。 如果日期1比日期2大,結果為正;如果日期1比日期2小,結果為負。例如:日期1(2019-01-02),日期2(2019-01-01),兩個日期在函數里互換位置,就是下面的結果
另一個關于時間計算的函數是:
timestampdiff(時間類型, 日期1, 日期2) 這個函數和上面diffdate的正、負號規則剛好相反。 日期1大于日期2,結果為負,日期1小于日期2,結果為正。在“時間類型”的參數位置,通過添加“day”, “hour”, “second”等關鍵詞,來規定計算天數差、小時數差、還是分鐘數差。示例如下圖:
【解題步驟】
1.將日銷表進行交叉聯結
2.選出上圖紅框中的“a.日期比b.日期大一天”
可以使用“diffdate(a.日期, b.日期) = 1”或者“timestampdiff(day, a.日期, b.日期) = -1”,以此為基準,提取表中的數據,這里先用diffdate進行操作。
代碼部分:
elect * from 日銷 as a cross join 日銷 as b on datediff(a.日期, b.日期) = 1;得到結果:
3.找出a中銷售額大于b中銷售額的數據
where a.銷售額(萬元) > b.銷售額(萬元)
得到結果:
4.刪掉多余數據
題目只需要找銷售額大于前一天的ID、日期、銷售額,不需要上表那么多數據。所以只需要提取中上表的ID、日期、銷售額(萬元)列。
結合一開始提到的兩個處理時間的方法,最終答案及結果如下:
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.銷售額(萬元);【本題考點】
1)考察邏輯思維能力,可以使用課程《分析方法》中的邏輯樹分析方法將復雜問題拆解成一個一個可以解決的子問題
2)考察多表聯結
3)針對時間的處理語句是在業務中經常用到的,需要熟練掌握。
4) 尤其考察對不同sql數據格式處理的掌握程度,
【舉一反三】
下面是氣溫表,名為weather,date列的數據格式為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;得到結果:
推薦:如何從零學會人工智能必備技能:數據庫和sql?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: led内部结构_粘合剂和密封胶性质一样吗
- 下一篇: 美的空调室内机漏水吗?