2017-07-15 263 views
0

之間結果我有一questions.First一個我的表結構是在波紋管: Table從2合併日期和personstatus列(SQL查詢)

在該表中有日期時間列和personstatus柱,被選擇的示例性用戶2首先是2017-07-03秒是2017-07-05,如何顯示結果IN ONE ROW如何MIN(id)在2017-07-03與personstatus ='我'以及MAX(id)如何2017-07-03 with personstatus ='o',

MIN(id)在2017-07-05 with personstatus ='i'以及MAX(id)在2017-07-05與personstatus ='o ',波紋管被添加表結果。 table and result

謝謝。

+0

沒有圖片謝謝。請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

回答

0

http://sqlfiddle.com/#!9/0cc3ec/22

Create Table t(
    id int, 
    _date datetime, 
    personstatus char(5) 
); 

Insert Into t(id, _date, personstatus) 
Values 
(1,'2017-07-03 10:00:00','i'), 
(2,'2017-07-03 10:10:37','i'), 
(3,'2017-07-03 16:10:00','o'), 
(4,'2017-07-03 17:40:27','o'), 
(5,'2017-07-05 09:10:22','i'), 
(6,'2017-07-05 09:30:43','i'), 
(7,'2017-07-05 17:44:02','o'), 
(8,'2017-07-05 17:50:19','o'); 

Select @input := '2017-07-03'; 

Select 
    t1.*, t2.* 
From 
    (Select * From t Where DATE(_date) = @input Order by _date ASC Limit 1) t1 
Join 
    (Select * From t Where DATE(_date) = @input Order by _date DESC Limit 1) t2 

更新11/8/2017年:

有很多方法兩個日期之間進行選擇。例如,您可以:
1.使用上述隊列創建一個過程,循環訪問日期並調用過程;或
2.使用兩個日期之間的日期創建臨時表,然後使用t1和t2加入臨時表;或者
3.通過日期循環並調用隊列。

我現在沒有MySQL服務器;希望你能制定出以下僞代碼:

declare @start date 
declare @end date 

set @start = '2017-02-03' 
set @end = '2017-02-05' 

while (@start <= @end) begin 
    Select 
    t1.*, t2.* 
    From 
    (Select * From t Where DATE(_date) = @start Order by _date ASC Limit 1) t1 
    Join 
    (Select * From t Where DATE(_date) = @start Order by _date DESC Limit 1) t2 

    set @start = dateadd(day, 1, @start) 
end 
0

感謝這個好答案@ Leo.W,但如何讓2日期範圍,例如;

敏ID在2017年2月3日,最大ID在2017年2月3日,
敏ID在2017年2月4日,最大的ID在2017年2月4日,

敏ID在2017年-02-05,最大ID在2017年2月5日

我試着此查詢但不能是正確的結果

選擇 T1。 ,t2。 從 (選擇*從t哪裏_date> ='2017-02-03 00:00:00' AND _date < ='2017-07-05 23:59:59'Order by _date ASC)t1 加入 (選擇*從t凡日期=''2017-02-03 00:00:00' AND _date < ='2017-07-05 23:59:59'由_date DESC排序)t2