C# Access DB Query通过分组子字符串并选择最大值来筛选列数据
数据库表“LabelInfo”C# Access DB Query通过分组子字符串并选择最大值来筛选列数据,c#,.net,ms-access,C#,.net,Ms Access,数据库表“LabelInfo” ID Labels 1 TRPKLM003 2 JPRECM001 3 MNTORM005 4 JPRECM004 5 MNTORM002 6 JPRECM003 7 TRPKLM002 8 TRPKLM004 列标签的长度是固定的。我想返回以下数据作为结果: TRPKLM004 MNTORM005 JPRECM004 我想编写一个
ID Labels
1 TRPKLM003
2 JPRECM001
3 MNTORM005
4 JPRECM004
5 MNTORM002
6 JPRECM003
7 TRPKLM002
8 TRPKLM004
列标签的长度是固定的。我想返回以下数据作为结果:
TRPKLM004
MNTORM005
JPRECM004
我想编写一个access查询,通过将匹配前6个字符和其余3个字符的最大值分组,只返回行。或者,如果我返回表中的所有行,我希望使用一种优化的方法来过滤C#中的结果,db引擎可以拆分
标签
字段的两个组件
SELECT
Left(Labels, 6) AS prefix_string
Val(Right(Labels, 3)) AS suffix_nmbr
FROM LabelInfo;
将其用作分组依据
查询的子查询
SELECT
sub.prefix_string,
Max(sub.suffix_nmbr) AS MaxOfSuffix_nmbr
FROM
(
SELECT
Left(Labels, 6) AS prefix_string
Val(Right(Labels, 3)) AS suffix_nmbr
FROM LabelInfo
) AS sub
GROUP BY sub.prefix_string;
如果在c#客户端代码中重新组合这两个部分不方便,那么可以让db引擎处理所有子查询
SELECT
sub2.prefix_string
& Format(sub2.MaxOfSuffix_nmbr, '000')
AS labels_alias
FROM
(
SELECT
sub1.prefix_string,
Max(sub1.suffix_nmbr) AS MaxOfSuffix_nmbr
FROM
(
SELECT
Left(Labels, 6) AS prefix_string
Val(Right(Labels, 3)) AS suffix_nmbr
FROM LabelInfo
) AS sub1
GROUP BY sub1.prefix_string
) AS sub2;
我认为你的问题有点含糊不清。到目前为止,我按desc的顺序重新修改了所有的行。这只是以排序的方式给了我数据。然后在我的代码中,我通过在每行上运行for循环来过滤数据,将标签的子字符串(标签,0,6)与其余项进行比较。由于其已排序,如果其找不到相同的标签,则返回该项目。。但是这会将每一行与所有行进行比较,并花费太多时间返回结果感谢您的查询。。你太棒了!!唯一的问题是我的前缀被截断了,就像。。。007返回为7,003返回为3。。我可以要3个满分吗。。因为我需要整个字符串作为结果,这是因为我将字符串部分转换为数字。您可以将其转换回“000”格式的字符串,并将其与“prefix_string”片段连接起来。查看最后一个(未测试的)查询版本是否返回您想要的结果。是。。知道了!!非常感谢。我花了好几个小时才让它正常工作!!你节省了很多时间!!