[MSSQL] SQL กับการบวก/ลบวันที่

วันนี้ผมได้งานจากที่่ทำงานมาให้เขียน Query เพื่อแจ้งเตือนสินค้าที่หมดอายุล่วงหน้าตามวันที่กำหนดไว้ ระหว่างวันที่กำหนดจนถึงจำนวนวันที่แจ้งเตือนล่วงหน้า โดยเอาผลัลพธ์ที่ได้มาจัดโปรโมชั่นลดแลกแจกแถมกัน (สมมติว่าเป็น 7 วัน) โดยผมค่อยๆแนะนำไปทีละขั้นตอน ดังนี้

เตรียมข้อมูล

  • กำหนดโครงสร้างตาราง ดังรูป
    โครงสร้างตารางที่ใช้ในบทความนี้
  • ใส่ช้อมูลเตรียมลงไป ดังรูป
    ข้อมูลที่ใช้ในบทความนี้

(more…)

[SQL Server] เชื่อหรือไม่ว่า SQL เอาตัวเลขมาลบกันได้

พอดีวันนี้งานที่ทำมีโจทย์ให้ว่าให้หาข้อมูลการซื้อ(BUY) และข้อมูลการขาย (SELL)  ณ ช่วงเวลาหนึ่ง เพื่อหาจำนวนสินค้าที่มีเรามีถืออยู่ (On Hand) ข้อมูลโครงสร้างตารางต่างๆ อ้างอิงจากหัวข้อที่ผ่านมา

  • เตรียมข้อมูล
    • กำหนดโครงสร้างตาราง OrderTx ดังรูป

    s1

  • กำหนดข้อมลให้ตาราง ดังนี้

s2

  • ความต้องการ(โจทย์)
    • ข้อมูลการซื้อ(BUY) และข้อมูลการขาย (SELL)  ณ ช่วงเวลาหนึ่ง(ระหว่างวันที่ 01-OCT-2013 ถึง 10-OCT-2013) เพื่อหาจำนวนสินค้าที่มีเรามีถืออยู่ (On Hand)
  • วิธีแก้ปัญหา หากติดความจากโจทย์เราสามารถแบ่งออกเป็น Query ย่อยๆ ได้ดังนี้
    • หาผลรวม(SUM) ของข้อมูลการซื้อ(BUY)ระหว่างวันที่ 01-OCT-2013 ถึง 10-OCT-2013

q1

    • หาผลรวม(SUM) ของข้อมูลการขาย(SELL)ระหว่างวันที่ 01-OCT-2013 ถึง 10-OCT-2013

q2

    • นำผลรวมการซื้อ(BUY) – ผลรวมของการขาย(SELL)

q3

  • สรุป
    • ภาษา SQL ทำอะไรได้มากกว่าที่คุณคิด เพียงแค่ต้องรู้จัดลองและทดสอบ จากตัวอย่างนี้หลักทีใช้ คือ Keword AS, Operator minus และทริกการ SELECT ซ้อนกัน ถ้าหากเราเอาไปเขียนโปรแกรม ต้องมี Loop เพิ่มเพื่อหาผลรวมอีก ซึ่งหากมีข้อมูลเยอะๆประมาณ100,000 รายการแล้ว เราจะพบถึงความแตกต่างในแง่ของความเร็วอย่างชัดเจน