【发布时间】:2016-07-22 16:24:06
【问题描述】:
USE tempdb;
GO
IF OBJECT_ID('tempdb..#demo_data') IS NOT NULL
BEGIN
DROP TABLE #demo_data;
END;
CREATE TABLE #demo_data
(
row_id INT PRIMARY KEY,
product VARCHAR(30) NOT NULL,
customer VARCHAR(30) NOT NULL,
measure VARCHAR(30) NOT NULL,
value NUMERIC(6, 1) NOT NULL,
valid_from_day INT NOT NULL,
valid_to_day INT NOT NULL
);
INSERT INTO #demo_data (
row_id,
product,
customer,
measure,
value,
valid_from_day,
valid_to_day
)
SELECT 1 row_id, 'Widgets' product, 'Tesco' customer, 'Gross Sales Price' measure, 1 value, 20130101 valid_from_day, 20130401 valid_to_day UNION ALL
SELECT 2 row_id, 'Widgets' product, 'Tesco' customer, 'Gross Sales Price' measure, 1.5 value, 20130301 valid_from_day, 20131231 valid_to_day UNION ALL
SELECT 3 row_id, 'Widgets' product, 'Tesco' customer, 'Gross Sales Price' measure, 2 value, 20130401 valid_from_day, 20150101 valid_to_day UNION ALL
SELECT 4 row_id, 'Widgets' product, 'Tesco' customer, 'Distribution Cost' measure, 5 value, 20130101 valid_from_day, 20130401 valid_to_day UNION ALL
SELECT 5 row_id, 'Widgets' product, 'Tesco' customer, 'Distribution Cost' measure, 6 value, 20130301 valid_from_day, 20140401 valid_to_day UNION ALL
SELECT 6 row_id, 'Widgets' product, 'Tesco' customer, 'Distribution Cost' measure, 7 value, 20131231 valid_from_day, 20150101 valid_to_day UNION ALL
SELECT 7 row_id, 'Widgets' product, 'Asda' customer, 'Gross Sales Price' measure, 100 value, 00000000 valid_from_day, 99999999 valid_to_day UNION ALL
SELECT 8 row_id, 'Widgets' product, 'Asda' customer, 'Gross Sales Price' measure, 200 value, 20131231 valid_from_day, 20150101 valid_to_day UNION ALL
SELECT 9 row_id, 'Widgets' product, 'Asda' customer, 'Distribution Cost' measure, 2 value, 20130301 valid_from_day, 20131231 valid_to_day UNION ALL
SELECT 10 row_id, 'Widgets' product, 'Asda' customer, 'Distribution Cost' measure, 3 value, 20140401 valid_from_day, 20150101 valid_to_day;
SELECT
row_id,
product,
customer,
measure,
value,
valid_from_day,
valid_to_day
FROM
#demo_data
ORDER BY 1;
编写 SQL 以识别哪些行对具有相同的产品、客户和度量,并且日期范围重叠
——例如第 1 行和第 2 行具有相同的产品/客户/度量和重叠的日期范围。
我很困惑你如何在表中进行比较。我对使用连接有一些想法,但它是内部连接还是普通连接
【问题讨论】:
-
这是甲骨文??看起来像 SQL Server - 你能澄清/更新吗?
-
它的 SQL 服务器对错误的标签感到抱歉
-
您需要做的第一件事是将这些日期存储为日期或在您的选择中处理。
-
看起来像一个学校问题(将问题发布为 B)有点放弃了),所以我不会给出完整的答案......但提示是选择您感兴趣的领域、分组依据,然后使用(聚合上的一个位置)来确定哪些值出现多次。
-
首先告诉我们结果中应该包含哪些行...看起来应该包括除 2 之外的所有行。
标签: sql sql-server database sql-server-2008