2017-04-04 75 views
1

我想問一下如何加入這個查詢? 第一次我從我的桌面日曆中獲取,當所有星期一取出並在本月第一次。mysql - 在一個表中選擇查詢加入

SELECT 
calender As Firsts 
FROM 
calender 
WHERE 
calender >= '2017-03-01' 
    AND calender <= '2017-03-31' 
    AND DAYOFWEEK(calender) = 2 
    OR calender = '2017-03-01' 
GROUP BY calender; 

然後我從我的桌面日曆中獲取所有星期日和本月的最後一天。

SELECT 
calender As Lasted 
FROM 
calender 
WHERE 
calender.calender >= '2017-03-01' 
    AND calender.calender <= '2017-03-31' 
    AND DAYOFWEEK(calender) = 1 
    OR calender = '2017-03-31' 
GROUP BY calender; 

而且我想這樣

First | Last 
2017-03-01 | 2017-03-05 
2017-03-06 | 2017-03-12 
2017-03-13 | 2017-03-19 
2017-03-20 | 2017-03-26 
2017-03-27 | 2017-03-31 

輸出我已經嘗試使用子查詢則錯誤1242子查詢返回多個1行,是否有可能加入這個兩個查詢?

感謝

回答

0

這是假設你有主鍵你的桌子上calendar

SELECT 
    (SELECT calender 
    FROM calendar ic 
    WHERE ic.primary_key = oc.primary_key 
    AND DAYOFWEEK(ic.calender) = 2 
    GROUP BY calendar) As First, 
    (SELECT calender 
    FROM calendar ic 
    WHERE ic.primary_key = oc.primary_key 
    AND DAYOFWEEK(ic.calender) = 1 
    GROUP BY calendar) As Last, 
FROM 
    calender oc 
WHERE 
    calender >= '2017-03-01' 
AND calender <= '2017-03-31' 
OR calender = '2017-03-01'; 
0

的一種方法是

SELECT (SELECT calender FROM calender WHERE 
    calender >= '2017-03-01' 
     AND calender <= '2017-03-31' 
     AND DAYOFWEEK(calender) = 2 
     OR calender = '2017-03-01' 
     GROUP BY calender) As Firsts, (SELECT calender FROM calender WHERE 
    calender.calender >= '2017-03-01' 
     AND calender.calender <= '2017-03-31' 
     AND DAYOFWEEK(calender) = 1 
     OR calender = '2017-03-31' 
     GROUP BY calender 
    ) As Last FROM calender 
+0

你的查詢結果是一樣的,我想我有新的方式來獲得結果。我會在稍後回答我自己的問題,感謝您的幫助:D –

0
SELECT 
startdate.Start, Enddate.End 
FROM 
(SELECT 
    @counter0:[email protected] + 1 AS ID, calender AS Selesai 
FROM 
    calender, (SELECT @counter0:=0) T 
WHERE 
    calender BETWEEN startdate AND enddate 
     AND DAYOFWEEK(calender) = 1 
     OR calender = enddate) Enddate 
    JOIN 
(SELECT 
    @counter:[email protected] + 1 AS ID, calender AS Mulai 
FROM 
    calender, (SELECT @counter:=0) T 
WHERE 
    calender BETWEEN startdate AND enddate 
     AND DAYOFWEEK(calender) = 2 
     OR calender = startdate) Startdate ON Startdate.ID = Enddate.ID 

這是我的方式來解決我的問題使用row_number(),謝謝我最好的朋友#Lun_Ng