【发布时间】:2018-06-27 15:24:51
【问题描述】:
更新: 这是我的实际查询:如果我在内部选择(注释掉的 where 子句)中设置了一个员工 ID,这个查询就可以完美运行。但是,如果我取出该员工 ID 以尝试为所有员工运行此 ID,它会选择(几乎)该员工的所有日期。
SELECT* FROM (
SELECT id, shop_id, local_id, employee_id, invoice_date,
LAG(shop_id)OVER(ORDER BY invoice_date) as new_Col1,
LAG(local_id)OVER(ORDER BY invoice_date) as new_Col2
FROM tmpMemPayment
) as A
WHERE NOT( (shop_id = ISNULL(new_Col1,''))
and (local_id = ISNULL(new_Col2,'')) )
----结束更新
我正在尝试一个复杂的查询,可以接近但不够接近。我已经尝试过分区,但仍然没有乐趣。
我正在尝试什么:
我的表: Col1 Col2 日期
x y 1/1/2018
x y 1/1/2017
x z 1/1/2016
x y 1/1/2015
a b 1/1/2014
a b 1/1/2013
x y 1/1/2012
我需要每个分区内的每一行都有最小日期,其中一个分区由 col1 和 col2 定义,对于一组连续日期是相同的 即我需要的结果集是:
x y 1/1/2017
x z 1/1/2016
x y 1/1/2015
a b 1/1/2013
x y 1/1/2012
我得到的最接近的是:
select t1.col1, t1.col2, min(t1.date)
from
MyTable t1
and t1.Date <
(
select max(t2.Date) from MyTable t2 where
(t2.col1 !=t1.col1 or t2.col2 != t1.col2)
)
group by col1, col2
union
select t1.col1, t1.col2, min(t1.date)
from
MyTable t1
and t1.Date >
(
select min(t2.Date) from MyTable t2
where (t2.col1 !=t1.col1 or t2.col2 != t1.col2)
)
group by col1, col2
【问题讨论】:
-
你想要的逻辑是什么?为什么第 1 行和第 5 行不在您的结果集中?
-
啊,感谢您的提问,抱歉,不清楚。我需要每个分区中具有最小日期的每一行,其中一个分区由 col1 和 col2 定义,对于一组连续日期是相同的。
-
你想做什么????在不告诉我们您想要什么的情况下发布损坏的查询不会帮助我们帮助您!!!
-
抱歉,GuidoG 在这里也正确地提醒了我。我已经编辑了。
-
@user621713 只是好奇你是否检查了我的答案,是否有任何问题?
标签: sql sql-server