我想运行一个类似的查询
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
我有一个包含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天每一分.我希望我现在更清楚了.
对于某些类型的SQL查询,辅助数字表可能非常有用.它可以创建为具有特定任务所需的行数的表,也可以创建为返回每个查询所需行数的用户定义函数.
创建这样一个函数的最佳方法是什么?
标题并没有完全体现我的意思,这可能是重复的.
这是长版本:给定一个客人的姓名,他们的注册日期和结账日期,我如何为他们作为客人的每一天生成一行?
例如:鲍勃在7月14日检查并离开7月17日.我想要
('Bob', 7/14), ('Bob', 7/15), ('Bob', 7/16), ('Bob', 7/17)
Run Code Online (Sandbox Code Playgroud)
作为我的结果.
谢谢!
在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)
我认为这是一个非常常见的问题,但我不知道这个过程是什么,所以我将用一个例子来描述它.这个概念是我想将稀疏数据集加入到完整的系列中,例如一周中的几天,一年中的几个月或任何有序集(例如,排名).稀疏数据中的空位置将在完整系列旁边显示为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)