สอบถามการรวมข้อมูล จาก 1 พย.-31 ตค. ของทุกปีคะ
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามการรวมข้อมูล จาก 1 พย.-31 ตค. ของทุกปีคะ
สอบถามการรวมข้อมูล จาก 1 พย.-31 ตค. ของทุกปีคะ
สอบถาม sql การรวมข้อมูล จาก 1 พย.-31 ตค. ของทุกปีคะ ต้องการให้ออกมาประมาณนี้คะ

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ความคิดเห็นที่
1


ความคิดเห็นที่
2
หมายถึง รายได้รวมตั้งแต่ 1 พย. -31 ตค. ของทุกปีนะคะ
ปกติเวลา group by year มันจะรวมรายได้ของทุกปีใช่มั้ยคะ
แต่ที่ต้องการ อยากได้ของ 1 พย. -31 ตค. ของทุกปีนะคะ ตามตัวอย่างรูปที่เห็นนะคะ
พอเข้าใจมั้ยคะ เป็นช่วงปีงบประมานนะคะ ไม่ได้เริ่มนับ 1 มค. - 31 ธค.
ปกติเวลา group by year มันจะรวมรายได้ของทุกปีใช่มั้ยคะ
แต่ที่ต้องการ อยากได้ของ 1 พย. -31 ตค. ของทุกปีนะคะ ตามตัวอย่างรูปที่เห็นนะคะ
พอเข้าใจมั้ยคะ เป็นช่วงปีงบประมานนะคะ ไม่ได้เริ่มนับ 1 มค. - 31 ธค.

ความคิดเห็นที่
3
น่าสนใจ
แนวทางถ้าฟิกเป็นรายปี น่าจะได้ แต่ถ้าวนลูปของทุกๆ ปี อันนี้ไม่แน่ใจ ต้องลองดูว่าทำได้ไหม
ถ้าสามารถทำในส่วนของวันที่ ที่ฟิกไปด้านล่างให้เป็นค่าแบบ dynamic หรือเปลี่ยนแปลงตามข้อมูลได้ ก็น่าจะใช้งานได้เลย
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | SELECT mydate, MIN (mydate), MAX (mydate), DATE_FORMAT( MIN (mydate), '%Y-11-01' ) as START_D, DATE_ADD(DATE_FORMAT(mydate, '%Y-11-01' ),INTERVAL 1 YEAR ) as END_D, IF( mydate BETWEEN DATE_FORMAT( MIN (mydate), '%Y-11-01' ) AND DATE_ADD(DATE_FORMAT(mydate, '%Y-11-01' ),INTERVAL 1 YEAR ) ,DATE_FORMAT(mydate, '%Y' ) , NULL ) as YY FROM tbl_data WHERE mydate!= '0000-00-00' GROUP BY IF( mydate BETWEEN '2015-11-01' AND '2016-11-01' ,1 ,0 ) ORDER BY YY DESC |
ถ้าสามารถทำในส่วนของวันที่ ที่ฟิกไปด้านล่างให้เป็นค่าแบบ dynamic หรือเปลี่ยนแปลงตามข้อมูลได้ ก็น่าจะใช้งานได้เลย

ความคิดเห็นที่
4
เพิ่มเติมอีกวิธี คือใช้การสร้างตาราง ที่แปลงวันที่ข้อมูลใหม่ก่อน
โดยให้ยกรายการข้อมูลของเดือน 11 และ 12 ไปเป็นข้อมูลของปีถัดไป
จากนั้น ก็จัดกลุ่มด้วยปีที่มีการแปลงวันที่แล้ว ก็จะได้ข้อมูลของปีงบประมาณนั้นๆ
ดูตัวอย่าง สมมติ tbl_data ตาราง คือข้อมูล
ฟิลด์ amount คือรายการที่จะทำการ SUM ค่าทั้งหมด และฟิลด์ mydate คือวันที่ของข้อมูล
แนวทางก็จะเป็นดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT SUM (amount) as amount, YEAR (new_date) as newdate FROM ( SELECT amount,mydate, IF( MONTH (mydate) > 10 , DATE_ADD(mydate, INTERVAL 1 YEAR ) , mydate ) AS new_date FROM tbl_data ) x GROUP BY YEAR (x.new_date) |

ความคิดเห็นที่
5
ขอบคุณคะ เด่วจะลองดูคะ


ขอบคุณทุกการสนับสนุน
![]()