嗨,关于分割/枢轴日期的问题,我有一个问题
这是我的查询
select Name
, Start
, End
from Employees
where Start >= '1/27/2014'
and End <= '1/31/2014'
样本数据就像这样
我想要做的是按照日期范围分割/转动所有数据,如此
但我不知道我怎么能这样做,如果可能的话?
谢谢。
答案 0 :(得分:0)
首先,将表格创建为 -
USE `Test`;
CREATE TABLE `test`.`Tbl_Sample_Data` (
`Name` VARCHAR(50) NULL ,
`Start` DATETIME NULL ,
`End` DATETIME NULL );
使用 -
插入行INSERT INTO `test`.`tbl_sample_data`
(`End`,
`Name`,
`Start`)
VALUES
(
'PutEndDateHere',
'PutNameHere',
'PutStartDateHere'
);
此处,日期应为yyyy-MM-dd
格式,否则会收到错误1292.
使用此查询获得您想要的内容。
SELECT `Name`,'Start' AS colName, `Start` AS value FROM test.tbl_sample_data
UNION ALL
SELECT `Name`,'End' AS colName, `End` AS value FROM test.tbl_sample_data
ORDER BY `Name` ASC
请注意,名称与关键字相同的列名必须包含在反引号中。例如。示例名称。否则,你会收到错误。
答案 1 :(得分:0)
您需要生成所有日期。我在这里使用cte做到了这一点。然后我将这个日期范围与您的数据一起加入并获得所需的结果。
with DateRange AS
(
SELECT CAST('1/27/2014' as DATEtime) DateValue
UNION ALL
SELECT dateadd(dd,1,DateValue)
FROM DateRange
WHERE dateadd(dd,1,DateValue) <= CAST('3/31/2014' as datetime)
)
select name
, DateValue
from Employees
join DateRange
on start <= DateValue
and [end] >= datevalue
order by
name
, DateValue
<小时/> 在您更新的问题后过时 我会用简单的联盟来解决这个问题:
select Name
, Start
from Employees
where Start >= '1/27/2014'
and End <= '1/31/2014'
union all
select Name
, End
from Employees
where Start >= '1/27/2014'
and End <= '1/31/2014'
order by
Name