簡體   English   中英

按日期分組日期

[英]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.

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