我有一个问题。第一个我的桌面结构如下: Table
在此表中有datetime列和personstatus列,示例用户被选中2日期首先是2017-07-03第二个是2017-07-05,如何显示结果IN ONE ROW 2017中的MIN(id)如何 - 07-03与personstatus =' i' 2017-07-03的MAX(id)如何与personstatus =' o',
2017-07-05的MIN(id)with personstatus =' i'以及如何在2017-07-05中使用personstatus =' o' MAX(id),bellow是添加表格结果。table and result
感谢。
答案 0 :(得分: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
2017年8月11日更新:
有两种方法可以在两个日期之间进行选择。例如,您可以:
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
答案 1 :(得分:0)
感谢@ Leo.W的这个好答案,但如何制作2个日期范围,例如;
2017-02-03中的最小ID,2017-02-03中的最大ID,
在2017-02-04中的最小ID,在2017-02-04中的最大ID,
2017-02-05中的最小ID,2017-02-05中的最大ID
我正在尝试此查询但不是正确的结果
选择 t1。,t2。 从 (选择*来自t where _date&gt; =&#39; 2017-02-03 00:00:00&#39; AND _date&lt; =&#39; 2017-07-05 23:59:59&#39;按_date ASC排序)t1 加入 (选择*从t其中日期&gt; =&#39; 2017-02-03 00:00:00&#39; AND _date&lt; =&#39; 2017-07-05 23:59:59&#39;按_date DESC排序)t2