从2合并日期和personstatus列(SQL查询)

之间结果我有一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

谢谢。

回答:

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

回答:

感谢这个好答案@ 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

以上是 从2合并日期和personstatus列(SQL查询) 的全部内容, 来源链接: utcz.com/qa/262327.html

回到顶部