相关疑难解决方法(0)

从日期范围生成天数

我想运行一个类似的查询

select ... as days where `date` is between '2010-01-20' and '2010-01-24'
Run Code Online (Sandbox Code Playgroud)

并返回如下数据:

days
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24

mysql sql datetime between

134
推荐指数
6
解决办法
11万
查看次数

MySQL如何填写范围内的缺失日期?

我有一个包含2列,日期和分数的表格.它最多有30个条目,过去30天每个条目一个.

date      score
-----------------
1.8.2010  19
2.8.2010  21
4.8.2010  14
7.8.2010  10
10.8.2010 14
Run Code Online (Sandbox Code Playgroud)

我的问题是缺少一些日期 - 我想看到:

date      score
-----------------
1.8.2010  19
2.8.2010  21
3.8.2010  0
4.8.2010  14
5.8.2010  0
6.8.2010  0
7.8.2010  10
...
Run Code Online (Sandbox Code Playgroud)

我需要从单个查询得到:19,21,9,14,0,0,10,0,0,14 ......这意味着缺少的日期用0填充.

我知道如何获取所有的值,并在服务器端语言迭代日期和错过空白.但这是否可以在mysql中进行,因此我按日期对结果进行排序并获取缺失的部分.

编辑:在此表中有另一列名为UserID,因此我有30.000个用户,其中一些在此表中有分数.如果日期<30天以前,我每天都会删除日期,因为我需要每个用户最近30天的分数.原因是我正在制作过去30天内用户活动的图表,并绘制图表我需要用逗号分隔的30个值.所以我可以在查询中告诉我USERID = 10203活动,查询会得到30分,过去30天每一分.我希望我现在更清楚了.

mysql sql gaps-and-islands

59
推荐指数
4
解决办法
4万
查看次数

SQL,辅助数字表

对于某些类型的SQL查询,辅助数字表可能非常有用.它可以创建为具有特定任务所需的行数的表,也可以创建为返回每个查询所需行数的用户定义函数.

创建这样一个函数的最佳方法是什么?

sql sql-server

57
推荐指数
3
解决办法
2万
查看次数

如何在SQL Server中生成一系列日期

标题并没有完全体现我的意思,这可能是重复的.

这是长版本:给定一个客人的姓名,他们的注册日期和结账日期,我如何为他们作为客人的每一天生成一行?

例如:鲍勃在7月14日检查并离开7月17日.我想要

('Bob', 7/14), ('Bob', 7/15), ('Bob', 7/16), ('Bob', 7/17) 
Run Code Online (Sandbox Code Playgroud)

作为我的结果.

谢谢!

sql t-sql sql-server

10
推荐指数
2
解决办法
4万
查看次数

SQL分组差距

在SQL Server 2005中,我有一个表格,其数据如下所示:

WTN------------Date  
555-111-1212  2009-01-01  
555-111-1212  2009-01-02  
555-111-1212  2009-01-03  
555-111-1212  2009-01-15  
555-111-1212  2009-01-16  
212-999-5555  2009-01-01  
212-999-5555  2009-01-10  
212-999-5555  2009-01-11 
Run Code Online (Sandbox Code Playgroud)

从这个我想提取WTN,Min(日期),Max(日期)扭曲是我想在日期中有间隙时也要打破,所以从上面的数据来看,我的结果应该是这样的:

WTN------------ MinDate---- MaxDate  
555-111-1212   2009-01-01  2009-01-03  
555-111-1212   2009-01-15  2009-01-16  
212-999-5555   2009-01-01  2009-01-01  
212-999-5555   2009-01-10  2009-01-11  
Run Code Online (Sandbox Code Playgroud)
  1. 如何在SQL Select/Group By中执行此操作?
  2. 这可以在没有列表或列表的情况下完成,我想要识别我想要识别的空白(这里的日期)吗?

sql t-sql sql-server sql-server-2005

7
推荐指数
1
解决办法
759
查看次数

如何创建一系列连接稀疏数据的月份?

我认为这是一个非常常见的问题,但我不知道这个过程是什么,所以我将用一个例子来描述它.这个概念是我想将稀疏数据集加入到完整的系列中,例如一周中的几天,一年中的几个月或任何有序集(例如,排名).稀疏数据中的空位置将在完整系列旁边显示为NULL.

假设我在SQL Server中运行以下查询以查找每月销售额.

SELECT
    YEAR([timestamp]),
    MONTH([timestamp]),
    COUNT(*)
FROM table1
WHERE YEAR([timestamp]) = YEAR(GETDATE())
GROUP BY
    YEAR([timestamp]),
    MONTH([timestamp])
ORDER BY
    YEAR([timestamp]) DESC,
    MONTH([timestamp]) DESC;
Run Code Online (Sandbox Code Playgroud)

但是,如果销售仅发生在今年的5月和8月,那么返回结果将如下所示:

2010    August    1234
2010    May       5678
Run Code Online (Sandbox Code Playgroud)

我希望我的返回结果集看起来像这样:

2010    January
2010    February
2010    March
2010    April
2010    May        1234
2010    June
2010    July
2010    August     5678
2010    September
2010    October
2010    November
2010    December
Run Code Online (Sandbox Code Playgroud)

我知道这样做的唯一方法是:

SELECT
    YEAR(GETDATE()),
    month_index.month_name,
    sales_data.sales
FROM (
    SELECT 'January' as month_name, 1 as month_number
    UNION
    SELECT 'February', 2
    UNION
    SELECT 'March', 3
    UNION …
Run Code Online (Sandbox Code Playgroud)

sql-server series sparse-matrix

2
推荐指数
2
解决办法
7480
查看次数