【问题标题】:SQL 查询结果集,我需要按“日期/Fecha”列按结果集分组
【发布时间】:2022-01-23 15:18:45
【问题描述】:

我有这个问题:

--START DATE
DECLARE @Inicio date
SET @Inicio = '01/01/2021'

--END DATE
DECLARE @Fin date
SET @Fin = '31/01/2021'


--LOOP
WHILE (@Inicio <= @Fin)

BEGIN
    

    --WHATEVER SELECT
    SELECT @Inicio AS Fecha, 0 AS Agente, 1 AS FE

    UNION ALL 

    --WHATEVER SELECT
    SELECT @Inicio AS Fecha, 1 AS Agente, 0 AS FE 


    --ADD 1 TO DATE
    SET @Inicio = DATEADD(day, 1, @Inicio)

END

它给出了这个结果集:

但是,我想将所有结果集与列 Fecha

分组

你能提供线索吗

通过 Fecha 添加组(我需要将结果汇总到日期) 看起来像这样 added the group by clause

但结果集为每一行重复标题: enter image description here

【问题讨论】:

  • 我已删除标签垃圾邮件,请仅标记您真正使用的内容。我假设(在查看图像之前)您使用的是 MySQL,因为您还标记了 [phpmyadmin],但这些图像看起来像 SQL Server Management Studio (SSMS)...
  • 你为什么在这里使用WHILE? SQL 是一种基于集合的语言。为什么你想要一个单独的结果集 per 日期?
  • 是的……我的错。很抱歉。
  • 我只想得到那个日期范围内的结果,这就是我尝试使用 WHILE 的原因
  • 但为什么不是BETWEEN&gt;=&lt;

标签: sql sql-server


【解决方案1】:

您的问题没有太多解释性。如果您想根据月份的天数获取数据,则可以使用以下查询:

--START DATE
DECLARE @Inicio date
SET @Inicio = '2021-01-01'

--END DATE
DECLARE @Fin date
SET @Fin = '2021-01-31'

;WITH CTE AS  
(  
    SELECT cast(DATEADD(DAY, DATEDIFF(DAY, 0, @Inicio), 0) as date) AS col_date  
    UNION ALL  
    SELECT cast(DATEADD(DAY, 1, col_date) as date)
    FROM CTE  
    WHERE col_date < @Fin     
)
SELECT col_date AS Fecha, 0 AS Agente, 1 AS FE from CTE

【讨论】:

  • 如果问题不清楚,您应该投票关闭而不是回答它
  • @Anu 它有效。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2019-04-03
  • 2020-10-07
  • 2010-10-11
相关资源
最近更新 更多