【问题标题】:SELECT DISTINCT on one column (SQL Server 2005 or greater) using php使用 php 在一列(SQL Server 2005 或更高版本)上选择 DISTINCT
【发布时间】:2015-05-11 10:13:59
【问题描述】:

我已经尝试过 stackoverflow 中提供的代码,但仍然出现错误。有人可以告诉我我在哪里弄错了吗?谢谢你!这是我的代码:

$allOrdersFromToday = $Microinvest->MSelectList('SELECT * ROW_NUMBER() OVER (PARTITION BY Acct ORDER BY ID) AS RowNumber FROM Operations WHERE Date = "' . $todayDate . '" AND OperType = 2 ORDER BY Acct DESC) AS a', '*', 'a.RowNumber = 1');

应该输出为:

SELECT  *
FROM    (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY Acct ORDER BY ID) AS RowNumber
         FROM   Operations
         WHERE  Date = "' . $todayDate . '" AND OperType = 2 ORDER BY Acct DESC) AS a
WHERE   a.RowNumber = 1

但我得到一个错误... :(

警告:mssql_query():消息:关键字附近的语法不正确 '选择'。 (严重性 15)在 /var/www/functions/MssqlLibry.php 在线 29

【问题讨论】:

  • 旁注:mssql 函数已被弃用,您不应该真正使用它们,因为您很容易发生 SQL 注入。查看 Microsoft SQL Server 的 PHP 驱动程序:sqlsrvphp.codeplex.com

标签: php sql sql-server distinct


【解决方案1】:

在大多数情况下,SQL Server 不支持子查询中的order by。试试这个:

SELECT  a.*
FROM (SELECT o.*,
             ROW_NUMBER() OVER (PARTITION BY Acct ORDER BY ID) AS RowNumber
      FROM Operations o
      WHERE  Date = "' . $todayDate . '" AND
             OperType = 2
     ) a
WHERE a.RowNumber = 1
ORDER BY a.Acct DESC;

此外,由于日期的格式,您可能会遇到问题。您应该使用参数化查询而不是将值替换为字符串。

【讨论】:

  • 我收到此错误:警告:mssql_query():消息:'ROW_NUMBER' 不是可识别的函数名称
  • 您使用的是什么版本的 MS SQL?当前支持的所有版本都支持ROW_NUMBER()
  • 我使用 SQL Server 2005
  • Microsoft SQL Server Management Studio Express 9.00.2047.00 Microsoft 数据访问组件 (MDAC) 2000.085.1132.00 (xpsp.080413-0852) Microsoft MSXML 2.6 3.0 4.0 6.0 Microsoft Internet Explorer 8.0.6001.18702 Microsoft .NET Framework 2.0.50727.3655 操作系统 5.1.2600
  • 它被记录为可用:msdn.microsoft.com/en-us/library/ms186734(v=sql.90).aspx。也许您在数据库上设置了兼容级别,删除了该功能。
猜你喜欢
  • 2020-03-16
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2016-03-26
相关资源
最近更新 更多