簡體   English   中英

SQL 選擇和日期范圍(分組依據?)

[英]SQL select and date ranges (group by?)

你好? 我通過 SQL select 有以下數據

+-----------------------------------------------------------+
|   Name              DateStart                DateEnd      |
+-----------------------------------------------------------+
| St Essai     2015-10-20 08:15:00      2015-10-20 10:15:00 |
| St Essai     2015-10-20 10:30:00      2015-10-20 12:30:00 |
| St Essai     2015-10-20 13:30:00      2015-10-20 15:30:00 |
| St Essai     2015-10-20 15:45:00      2015-10-20 17:45:00 |
| St Essai     2015-10-21 08:15:00      2015-10-21 10:15:00 |
| St Essai     2015-10-21 10:30:00      2015-10-21 12:30:00 |
| St Essai     2015-10-21 13:30:00      2015-10-21 15:30:00 |
| St Essai     2015-10-21 15:45:00      2015-10-21 17:45:00 |
+-----------------------------------------------------------+

正如你所看到的,我一天有 4 行。 我想要代替

+-----------------------------------------------------------+
|  Name              DateStart                DateEnd       |
+-----------------------------------------------------------+
| St Essai     2015-10-20 08:15:00      2015-10-20 17:45:00 |
| St Essai     2015-10-21 08:15:00      2015-10-21 17:45:00 |
+-----------------------------------------------------------+

第一行是NAME ,第二個DATE START ,最后一個DATE END

因此,而不是一天的 4 行,只有一個重新組合 4 個日期。

是否只有在有 4 行(代表一整天)的情況下才有可能。

非常感謝 !

SELECT NAME,
       MIN(DATE) AS date_from,
       MAX(DATE) AS date_to
FROM tablename
GROUP BY NAME;

按名稱分組並取最小值和最大值

select NAME, min(DATE_START), max(DATE_END) from thetable group by NAME, date(DATE_START)

嘗試這個

select name,min(date) as date_from, max(date) as date_to from table
group by name

你。 我創建了一個看起來像你的表,並稍微復雜了一些數據只是為了更好地測試它。 想法是找到每天的最小和最大小時數並將它們連接到一行。

select minTable.minhour , maxTable.maxhour, maxTable.name
from (select  min(startdate) as minhour, date(startdate) as aday, name from ATable
group by aday, name) minTable 
join 
(select  max(enddate) as maxhour, date(enddate) as aday , name from ATable
group by aday, name) maxTable
on minTable.aday = maxTable.aday and minTable.name = maxTable.name

或更簡單的...

select  min(startdate) , max(enddate), name from ATable
group by date(startdate), name

您只需要通過以下方式在您的組中添加date(datestart)

select name,
       min(datestart) as  datestart,
       max(dateend) as  dateend
   from mytable
   group by name,date(datestart);

SQL 小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM