[英]Group dates by their day of week
我有一個問題,無法找到解決方案。
我有一個簡單的電視節目表,如下所示:
CREATE TABLE IF NOT EXISTS programs ( id_program int NOT NULL AUTO_INCREMENT PRIMARY KEY, air datetime, title varchar(50) );
和表中的一些行:
2003-10-20 17:00 Factor 2003-10-21 17:00 Factor 2003-10-22 17:00 Factor 2003-10-20 19:00 Form 2003-10-21 14:00 Factor
如何獲得因子的結果,如下所示:
monday - wednesday : 17.00 tuesday : 14.00;
是可以在SQL中執行此操作還是需要在PHP中獲取數據?
我認為在一個查詢中准確得到你想要的東西並不容易。 但我找到的東西幾乎是你想要的結果:
SELECT TIME(air), title, GROUP_CONCAT(DAYOFWEEK(air))
FROM programs WHERE title = 'Factor'
GROUP BY TIME(air)
這給了我以下結果:
TIME(air) title GROUP_CONCAT(DAYOFWEEK(air))
-------------------------------------------------
14:00:00 Factor 3
17:00:00 Factor 2,3,4
有了這個結果,您可以輕松利用PHP獲得所需的結果。 像“星期一,星期三,星期五,星期六”這樣的結果也是可能的。
select date_format(`air`,'%d-%b %h:%i') from programs
這並不能完全回答MSSQL中的問題。 我知道有MySQL風味可以做到這一點
declare @tempTable TABLE (dt_timeOfProgram datetime, str_name varchar(10));
insert into @tempTable values
('2003-10-20 17:00', 'Factor'),
('2003-10-21 17:00', 'Factor'),
('2003-10-22 17:00', 'Factor'),
('2003-10-20 19:00', 'Form'),
('2003-10-21 14:00', 'Factor');
select
REPLACE(REPLACE(REPLACE(dow, '</dow><dow>', ','), '<dow>',''),'</dow>', '') as DOW
, [time]
, [showName]
from ( select distinct
CAST(dt_timeOfProgram as time) as [time],
str_name [showName],
( SELECT DATENAME(dw, t1.dt_timeOfProgram) as [dow]
FROM @tempTable t1
where t1.str_name=t2.str_name
and CAST(t1.dt_timeOfProgram as time) = CAST(t2.dt_timeOfProgram as time)
order by t1.dt_timeOfProgram
for XML PATH('')) [dow]
from @tempTable t2) as t
這是結果集
Tuesday 14:00:00.0000000 Factor
Monday,Tuesday,Wednesday 17:00:00.0000000 Factor
Monday 19:00:00.0000000 Form
這是非常草率的工作。 我永遠不會在實時應用程序中這樣做。 這個邏輯將由業務邏輯而不是db來處理。
數據庫資源通常是LEASE可伸縮的。 所以最后,你想盡可能少地使用它們。
祝好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.