【发布时间】:2018-04-16 23:58:15
【问题描述】:
标题可能听起来很愚蠢,但我不知道还能给它起什么名字。事先很抱歉。
我的问题。我发现这个旧查询需要修改。
SELECT t.batchid, t.SQLidentity, t.qvardenum, t.kassorsakskod, t.editint, t.rowcreatedby
FROM dbo.qdin t
INNER JOIN (
SELECT batchid, max(sqlidentity) AS MaxId
FROM dbo.qdin
WHERE qparamid = 1
GROUP BY batchid)
tm on t.batchid = tm.batchid AND t.sqlidentity = tm.MaxId
我需要为它添加列 tiq.qparamgrupp 和 Where 子句。我设法加入表格并添加列,但我似乎无法添加 Where 子句。
这是我现在的查询。
SELECT t.batchid,
t.sqlidentity,
t.qvardenum,
t.kassorsakskod,
t.editint,
t.rowcreatedby,
tiq.qparamgrupp
FROM dbo.qdin t
INNER JOIN dbo.tiq
ON tiq.aonr = T.aonr
AND tiq.aopos = T.aopos
AND tiq.dummyuniqueid = T.conndummyuniqueid
INNER JOIN (SELECT batchid,
Max(sqlidentity) AS MaxId
FROM dbo.qdin
WHERE qparamid = 1
GROUP BY batchid) tm
ON t.batchid = tm.batchid
AND t.sqlidentity = tm.maxid
WHERE tiq.qparamgrupp = 2
它什么也不返回。
编辑 这是内容的一部分。
qdin.batchid qdin.qparamid tiq.qparamgrupp qdin.qvardenum
(03-2020 10471) 1 2 5,26
(03-2020 10471) 1 3 5,23
(03-2020 10471) 2 3 3290
(03-2020 10471) 2 2 3400
(03-2020 10471) 3 4 0
(03-2020 10471) 4 2
(03-2020 10471) 4 3
(03-2020 10471) 5 3
(03-2020 10471) 5 2
如果我在没有“WHERE tiq.qparamgrupp = 2”的情况下运行查询,我会得到这个
qdin.batchid qdin.qparamid tiq.qparamgrupp qdin.qvardenum
(03-2020 10471) 1 3 5,23
当我真的想要这个时。
qdin.batchid qdin.qparamid tiq.qparamgrupp qdin.qvardenum
(03-2020 10471) 1 2 5,26
EDIT2 如果我运行这个
SELECT t.batchid, t.qparamid,
t.sqlidentity,
t.qvardenum,
tiq.qparamgrupp
FROM dbo.qdin t
INNER JOIN dbo.tiq
ON tiq.aonr = T.aonr
AND tiq.aopos = T.aopos
AND tiq.dummyuniqueid = T.conndummyuniqueid
AND tiq.qparamgrupp = 2
WHERE t.batchid = '03-2020 10471' AND t.qparamid = 1 AND tiq.qparamgrupp = 2
我明白了
batchid qpramid sqlidentity qvardenum qparamgrupp
03-2020 10471 1 32278 5.2600000 2
哪个好。但问题是当我运行另一个“batchid”并且有 2 条记录具有相同的“qparamid”和“qparamgrupp”时。这就是为什么我想要最后一条记录时有“max(sqlidentity)”。
例子
SELECT t.batchid, t.qparamid,
t.sqlidentity,
t.qvardenum,
tiq.qparamgrupp
FROM dbo.qdin t
INNER JOIN dbo.tiq
ON tiq.aonr = T.aonr
AND tiq.aopos = T.aopos
AND tiq.dummyuniqueid = T.conndummyuniqueid
AND tiq.qparamgrupp = 2
WHERE t.batchid = '03-2020 10470' AND t.qparamid = 1 AND tiq.qparamgrupp = 2
给我这个
batchid qpramid sqlidentity qvardenum qparamgrupp
03-2020 10470 1 32112 5.2300000 2
03-2020 10470 1 32235 5.3000000 2
有没有更简单的方法或另一种方法来写这个,这样我就只能得到
03-2020 10470 1 32235 5.3000000 2
?
提前致谢
西苏
【问题讨论】:
-
您的查询似乎没问题。最喜欢的是在该连接上没有任何带有
qparamgrupp = 2的行。尝试删除第二个加入并检查是否有任何结果。如果有,请检查它们是否与第二个连接匹配。您也可以尝试使用LEFT JOIN而不是INNER JOIN -
这可能是因为您的任何 JOINS 或 WHERE 子句都找不到匹配项。先尝试不使用 where 条件。即使那样它也没有给您结果,请一一访问您的JOINS。
-
编辑了部分内容。
-
可能是因为我想要子查询中的 MAX sqlidentity 并且与外部子句不匹配?
标签: sql sql-server