假设我在数据库中有以下数据,我试图通过Excel中的Microsoft Query进行查询:
Col_A: Col_B: Col_C: Col_D: Date1: Date2:
a1 b1 c1 d1 Dt1_1 Dt2_1
a1 b2 c2 d2 Dt1_1 Dt2_2
a1 b3 c3 d3 Dt1_1 Dt2_3
a1 b4 c4 d4 Dt1_2 Dt2_4
a1 b5 c5 d5 Dt1_2 Dt2_5
并且,就日期而言,假设,例如," _1" < " _2&#34 ;.
因此,对于Col_A
中的每个值,我想要的是为最早的Date1
为每个Date2
获取一行。
所以,鉴于这些数据,我想回来:
Col_A: Col_B: Col_C: Col_D: Date1: Date2:
a1 b1 c1 d1 Dt1_1 Dt2_1
a1 b4 c4 d4 Dt1_2 Dt2_4
换句话说,由于Date1
已更改,我们会获取最早Date2
的数据。
我希望这是有道理的。
在MySQL中,我相信查询看起来像:
SELECT Col_A, Col_B, Col_C, Col_D, Date1, Date2
FROM MyTable
ORDER BY Col_A, Date1, Date2
GROUP BY Col_A, Date1, Date2
或类似的东西:
SELECT Col_A, Col_B, Col_C, Col_D, Date1, Date2,
RANK() OVER(PARTITION BY Col_A, Date1 ORDER BY Date2) as RN
FROM MyTable
WHERE RN = 1
ORDER BY Col_A, Date1, Date2
......我知道这不会奏效,但逻辑几乎就是我所寻找的......
但我不知道如何在Microsoft Query中执行此操作。
我希望这有道理!!
谢谢!
答案 0 :(得分:1)
Microsoft Query不会为您提供很多选项,因此您最好将其创建为数据库中的视图。这是MSSQL SQL来设置它:
CREATE VIEW MyView AS
WITH M_CTE(M_COL_A, M_Date1, M_Date2)
AS(
SELECT A.[Col_A]
,A.[Date1]
,MIN(A.[Date2]) AS Date2
FROM [Sheet1] A
GROUP BY A.[Col_A]
,A.[Date1])
SELECT B.* FROM [Sheet1] B
INNER JOIN M_CTE
ON B.Col_A = M_COL_A
AND B.Date1 = M_Date1
AND B.Date2 = M_Date2
然后,您可以使用Excel中的MS Query轻松连接到视图。