Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅显示由两列的子字符串分组的最新记录_Sql_Sql Server - Fatal编程技术网

Sql 仅显示由两列的子字符串分组的最新记录

Sql 仅显示由两列的子字符串分组的最新记录,sql,sql-server,Sql,Sql Server,我试图只显示基于两列中的子字符串标准的最新记录 SELECT convert(varchar, DateTime, 100) AS "Date and Time" ,Text2 AS Area ,Substring(Text1, 1,Charindex('/', Text1)-1) AS Device ,(Substring(Text1, Charindex('/', Text1)+1, LEN(Text1)) + Substring(PText6, Charindex(

我试图只显示基于两列中的子字符串标准的最新记录

SELECT convert(varchar, DateTime, 100) AS "Date and Time"
    ,Text2 AS Area
    ,Substring(Text1, 1,Charindex('/', Text1)-1) AS Device
    ,(Substring(Text1, Charindex('/', Text1)+1, LEN(Text1)) + Substring(PText6, Charindex(' ', PText6)+1, LEN(PText6))) AS Interlock
    ,Substring(PText7, 1,Charindex(':', PText7)-1) AS Username
FROM a_databse.dbo.a_view AS data
WHERE PText6 LIKE '%BypIn%' AND DateTime = (SELECT MAX(DateTime) FROM 
a_database.dbo.a_view WHERE Text1 = data.Text1 AND Interlock = data.Interlock AND PText6 LIKE 'Set%')
在最后一行

Interlock = data.Interlock
需要替换以允许正确分组,因为列名“Interlock”无效。但是,它只接受真正的列引用,例如:

Text1 = data.Text1
但是使用子字符串:

Substring(PText6, Charindex(' ', PText6)+1, LEN(PText6)) = data.Substring(PText6, Charindex(' ', PText6)+1, LEN(PText6))
将抛出错误:

Cannot find either column "data" or the user-defined function or aggregate "data.Substring", or the name is ambiguous

您需要正确复制粘贴所有表达式,例如
data.SUBSTRING(PText6,…)
应该是
SUBSTRING(data.PText6,…)
。但您可以使用交叉应用简化查询:

SELECT CONVERT(varchar, DateTime, 100) AS "Date and Time"
     , Text2 AS Area
     , data_vars.Device
     , data_vars.Interlock
     , data_vars.Username
FROM a_databse.dbo.a_view AS data
CROSS APPLY (
    SELECT SUBSTRING(Text1, 1, CHARINDEX('/', Text1) - 1) AS Device
         , SUBSTRING(Text1, CHARINDEX('/', Text1) + 1, LEN(Text1)) + SUBSTRING(PText6, CHARINDEX(' ', PText6) + 1, LEN(PText6)) AS Interlock
         , SUBSTRING(PText7, 1, CHARINDEX(':', PText7) - 1) AS Username
) AS data_vars
-- all columns inside data_vars are now accessible inside WHERE, GROUP BY, SELECT and ORDER BY
WHERE PText6 LIKE '%BypIn%' AND DateTime = (
    SELECT MAX(DateTime)
    FROM a_database.dbo.a_view
    WHERE Text1 = data.Text1 AND Interlock = data_vars.Interlock AND PText6 LIKE 'Set%'
)

使用字符串表达式是如何导致语法错误的?@GordonLinoff我已将错误添加到问题中,请查看更新版本,谢谢所有记录中是否都有“/”出现?如果不是,则可能为负值,并可能导致error@Avi该字符存在于该特定子字符串的所有记录中