按SQL中select语句以外的字段排序
我需要创建一个只提取customer\u no列的查询(因为软件限制是这样的,并且我不能从外部对其进行编码)。但我需要能够通过create_dt(反向)列对数据进行排序。代码/SQL限制了我使用以下内容,因为为了按某些内容排序,数据必须出现在select语句中 我不能让它出现在那里——有什么办法可以解决这个问题吗按SQL中select语句以外的字段排序,sql,tsql,join,sql-order-by,Sql,Tsql,Join,Sql Order By,我需要创建一个只提取customer\u no列的查询(因为软件限制是这样的,并且我不能从外部对其进行编码)。但我需要能够通过create_dt(反向)列对数据进行排序。代码/SQL限制了我使用以下内容,因为为了按某些内容排序,数据必须出现在select语句中 我不能让它出现在那里——有什么办法可以解决这个问题吗 Select Distinct top 3500 a.customer_no From T_CUSTOMER a WITH (NOLOCK) JOIN (Select a
Select Distinct top 3500 a.customer_no
From T_CUSTOMER a WITH (NOLOCK)
JOIN (Select a1.customer_no From VXS_CUST_TKW a1 WITH (NOLOCK) Where a1.tkw in (141)) as e ON e.customer_no = a.customer_no
Where 1 = 1
order by a.create_dt desc
这看起来不像mysql 无论如何。。。您可以尝试一个有序的子选择IE
From (select * from T_CUSTOMER order by create_dt) a WITH (NOLOCK)
我希望这有帮助。当然可以。您的查询看起来像SQL Server,这可能会满足您的要求:
Select top 3500 a.customer_no
From T_CUSTOMER a WITH (NOLOCK) JOIN
(Select a1.customer_no
From VXS_CUST_TKW a1 WITH (NOLOCK)
Where a1.tkw in (141)
) e
ON e.customer_no = a.customer_no
Where 1 = 1
group by a.customer_no
order by max(a.create_dt) desc;
MySQL中的等效查询如下所示:
Select a.customer_no
From T_CUSTOMER a JOIN
(Select a1.customer_no
From VXS_CUST_TKW a1
Where a1.tkw in (141)
) e
ON e.customer_no = a.customer_no
Where 1 = 1
order by a.create_dt desc
limit 3500;
我删除了
独立的
,因为它可能不是必需的。如果是,请将其重新添加。使用包含您要按其排序的列的子查询。然后,主查询可以只返回您关心的列:
SELECT customer_no
FROM (
Select top 3500 a.customer_no, a.create_dt
From T_CUSTOMER a WITH (NOLOCK) JOIN
(Select a1.customer_no
From VXS_CUST_TKW a1 WITH (NOLOCK)
Where a1.tkw in (141)
) e
ON e.customer_no = a.customer_no
Where 1 = 1
order by a.create_dt desc
)
我从来没有在MySQL上遇到过这样的问题。另一方面,MySQL没有
Top3500
,您必须在查询结束时使用Limit3500
。你确定你在使用MySQL吗?它是transact-SQL。我相信。我正在通过一个软件工作——在前端。也就是说,前3500名可以毫无问题地工作,但排序不起作用。You's WHERE子句没有用,为什么它在那里?您知道在每个查询上抛出NOLOCK的后果吗?您可以并且将得到丢失和/或重复的行@约翰鲁德尔系统自己创建语法,但当我们需要过滤/修改它时,通常是这样,我们会在代码模式下打开它并进行更改。但是我们尽量不做太多的更改,因为我们并不总是能够测试它。我使用您的查询-第一个查询,它似乎可以工作,但当我在单词select后添加Distinct时,我出现了以下错误:如果指定select Distinct(-1),则Order By items必须出现在选择列表中我似乎无法摆脱它。@YelizavetaYR。最简单的解决方案是使用groupby
而不是distinct
。我修改了第一个查询。