tsql - 选择中的最小日期标志
问题描述
我有一张包含产品销售记录的表格。出于销售计数的目的,一件产品只能计数一次。在这种情况下,产品被多次销售和撤销,我们应该只考虑它在最小日期的月份中,其余的所有日期都应该标记为否。
示例:
Product Month Sales flag
A Jan-01 Y
B Jan-01 Y
A Feb-01 N
C Feb-01 Y
我怎样才能从上面指示的表中写一个选择。任何帮助,将不胜感激。
尝试并失败。
解决方案
这里的技巧是按“Jan-01”、“Feb-01”等排序是很棘手的,因为您需要对存储为文本的数值进行排序。这是日历表或数据维度的用途之一。在下面的解决方案中,我正在创建一个带有“月数”的即时日期维度表,您可以按...
-- Sample data
DECLARE @table TABLE
(
Product CHAR(1) NOT NULL,
Mo CHAR(6) NOT NULL
)
INSERT @table VALUES
('A', 'Jan-01'),
('B', 'Jan-01'),
('A', 'Feb-01'),
('C', 'Feb-01');
-- Solution
SELECT f.Product, f.Mo, [Sales Flag] = CASE f.rnk WHEN 1 THEN 'Y' ELSE 'N' END
FROM
(
SELECT t.Product, i.Mo, rnk = ROW_NUMBER() OVER (PARTITION BY t.Product ORDER BY i.RN)
FROM @table AS t
JOIN
(
SELECT i.RN, Mo = LEFT(DATENAME(MONTH,DATEADD(MONTH, i.RN-1, '20010101')),3)+'-01'
FROM
(
SELECT RN = ROW_NUMBER() OVER (ORDER BY (SELECT 1))
FROM (VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS x(x)
) AS i
) AS i ON t.Mo = i.Mo
) AS f;
回报:
Product Mo Sales Flag
------- ------ ----------
A Jan-01 Y
A Feb-01 N
B Jan-01 Y
C Feb-01 Y
推荐阅读
- python - PySide2,是否可以在 QTableWidgetItem 中有 HTML 文本?
- elasticsearch - 如何有条件地更新elasticsearch文档?
- css - Position Sticky 在 Flexbox 中不起作用——可能是什么原因?
- laravel - Vue router.push() 显示 404 组件,但浏览器手动重新加载
- flutter - 集团模式:每个屏幕都有自己的集团?
- elasticsearch - 如何将 Kibana 查询转换为“elasticsearch_dsl”查询
- flutter - Future Builder 拥有关于第二次热重载的数据
- cluster-computing - 从 Slurm 作业中提交 Slurm 作业
- java - 询问互联网是否可用时出现 NullPointerException
- sql - 从数组中展平雪花中的数据源