用SQL找出每天新增多少用戶

用SQL找出每一天新增的用戶,是SQL面試考題之一;也是大家需要熟悉的SQL語法。因為工作上也滿常用的,像是尋找特定時間區間內某個table每天新增的資料筆數。

我記得之前還在台灣工作時,曾待過專門做maintenance的部門,每天的工作不是開發新功能,而是需要連線到不同國家的客戶的環境去debug。我當時英文口說還是和native speaker有點距離,所以公司會配一個位在菲律賓遠端工作的同事,和我一起連線到客戶的環境,我和菲律賓的溝通還是用英文,但是和客戶之間的溝通80%都由菲律賓的同事處理,我則是負責解決Bug;有次為了確認之前部署的API是否有打通,所以需要查詢某個table在API打通之後每天新增的資料筆數。就用到了類似的語法。

Continue reading

Dynamic Management Views (DMV) and Dynamic Management Functions (DMF)

根據MSDN:

Dynamic management views and functions return server state information that can be used to monitor the health of a server instance, diagnose problems, and tune performance.

透過DMV和DMF,我們可以查看系統的狀態,這對Performance monitoring和optimization十分有幫助。

Continue reading

Check schema and objects in MSSQL

以前工作時待過一個全職debug的部門,常常需要連線到不同國家的客戶的環境去debug,公司會分配一個位在菲律賓遠端工作的同事,和我一起連線到客戶的環境,我和菲律賓的溝通還是用英文,但是和客戶之間的溝通80%都由菲律賓的同事處理,我則是負責解決Bug。有時候bugs的產生是客戶在版本升級時,我們的deployment沒有完整地考慮所有客戶的升級路徑。這時候我就需要寫deployment scripts手動更新客戶的database,而我通常需要檢查database裡面的schema和objects (e.g., View, Stored Procedure, Functions, …)是否有被正確地deploy進去。

Continue reading

The ORDER BY clause is invalid in some scenarios

在做數據分析時,我們常常需要讓資料按照特定column來排序需要用到ORDER BY clause,但是在MSSQL中,ORDER BY clause沒辦法在views、inline functions、derived tables、subqueries和CTE中使用。除非有和TOP、OFFSET或FOR XML一起使用。(因為通常在這種情況下,和TOP、OFFSET或FOR XML一起使用整個query statement才有意義)

Continue reading

Foreign key in T-SQL

Foreign keys的目的在於確保資料的一致性,但會犧牲performance,而且使用上會比較麻煩(e.g., INSERT、DELETE和UPDATE的時候)。我參與過一些projects,有些projects為了貪圖方便都沒有在使用Foreign keys,但事後造成一堆難以解決的資料一致性的問題。網路上有些討論,不用Foreign key就好像開車不繫安全帶一樣。貪圖一時方便,卻有可能造成更嚴重的後果。

Continue reading