สอบถามการรวมข้อมูล จาก 1 พย.-31 ตค. ของทุกปีคะ

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

สอบถามการรวมข้อมูล จาก 1 พย.-31 ตค. ของทุกปีคะ
สอบถาม sql การรวมข้อมูล จาก 1 พย.-31 ตค. ของทุกปีคะ ต้องการให้ออกมาประมาณนี้คะ


Arasked 04-09-2017 12:06:48

คำแนะนำ และการใช้งาน

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


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
 หมายถึง รายได้ของปี 60 คือรายการของวันที่ เท่าไหร่ถึงวันที่เท่าไหร่ของปีไหน?


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


arasked 04-09-2017 13:23
 ความคิดเห็นที่ 3
น่าสนใจ 
แนวทางถ้าฟิกเป็นรายปี น่าจะได้ แต่ถ้าวนลูปของทุกๆ ปี อันนี้ไม่แน่ใจ ต้องลองดูว่าทำได้ไหม

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 หรือเปลี่ยนแปลงตามข้อมูลได้ ก็น่าจะใช้งานได้เลย

 


ninenik 04-09-2017
 ความคิดเห็นที่ 4
เพิ่มเติมอีกวิธี คือใช้การสร้างตาราง ที่แปลงวันที่ข้อมูลใหม่ก่อน
โดยให้ยกรายการข้อมูลของเดือน 11 และ 12 ไปเป็นข้อมูลของปีถัดไป
จากนั้น ก็จัดกลุ่มด้วยปีที่มีการแปลงวันที่แล้ว ก็จะได้ข้อมูลของปีงบประมาณนั้นๆ
 
ดูตัวอย่าง สมมติ tbl_data ตาราง คือข้อมูล 
ฟิลด์ amount คือรายการที่จะทำการ SUM ค่าทั้งหมด และฟิลด์ mydate คือวันที่ของข้อมูล
แนวทางก็จะเป็นดังนี้
 
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)


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


arasked 05-09-2017 10:10
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ