按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

我需要创建一个只提取customer\u no列的查询(因为软件限制是这样的,并且我不能从外部对其进行编码)。但我需要能够通过create_dt(反向)列对数据进行排序。代码/SQL限制了我使用以下内容,因为为了按某些内容排序,数据必须出现在select语句中

我不能让它出现在那里——有什么办法可以解决这个问题吗

 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
。我修改了第一个查询。