小编D.G*_*vez的帖子

有关SQL-Server查询的建议

我正在寻求改进我使用SQL-Server 2005为ASP.NET 4.0中的小型Web应用程序编写的查询.此应用程序将允许用户按产品ID进行搜索并让它返回以下信息:

  • 最高购买价格+最近购买日期@此价格
  • 最低购买价格+最近购买日期@此价格
  • 最近的购买价格+日期
  • 平均购买价格(可选,我认为这可能会提高应用程序的实用性)

这是Products表的结构(我只包括相关列,这是一个已经在生产中的数据库,这些是非pk列)

  • product_id(nvarchar(20))
  • 价格(十进制(19,2))
  • pDate(日期时间)

在我放下查询之前,我到目前为止我只想说我可以通过多个查询轻松获取此信息,因此如果这是最佳实践,则忽略改进查询,但我的目标是最小化所需查询的数量获取所有需要的信息.

到目前为止我所拥有的:(注意:有一些行的价格= 0所以我忽略了那些在底部选择寻找MIN价格)

SELECT price, MAX(pDate)
FROM Products
WHERE product_id = @product_id AND
     (price = (SELECT MAX(price)
               FROM Products
               WHERE product_id =@product_id) OR
      price = (SELECT MIN(price)
               FROM Products
               WHERE product_id = @product_id AND price > 0))
GROUP BY price
Run Code Online (Sandbox Code Playgroud)

现在这返回2行:

  • 第一个=最低价格+日期
  • 第二行=高价+日期

我理想的是,如果可能的话,让查询返回1行,并带有上面列出的所有必需信息,因为它可以简化在ASP中显示ASP中的信息.就像我之前说的那样,如果有多个查询,那么就不需要在这里重新编写复杂的查询.

编辑

这是一些示例数据

样本数据

所需的查询结果:(忽略我在excel中输入的格式)

在此输入图像描述

以下是Ken Benson将要使用的查询:

SELECT TOP 1 prod.product_id,
   minp.price AS minprice, minp.pDate as minlastdate,
   maxp.price AS maxprice, maxp.pDate as maxlastdate,
   ag.price AS averageprice
FROM …
Run Code Online (Sandbox Code Playgroud)

sql asp.net sql-server-2005

6
推荐指数
1
解决办法
265
查看次数

SQL查询建议

我一直无法找到适当的查询来处理SQL Server中的这种情况.

有两个表,仓库和转移:

仓库

  • wh_id(PK)
  • wh_name

传递

  • transfer_id(PK)
  • transfer_from(FK)
  • transfer_to(FK)

我需要一个查询来返回:

  • transfer_id
  • transfer_from - 名字,不是id
  • transfer_to - 名称,而不是id

到目前为止我尝试过的:

SELECT T.transfer_id, WH.wh_name, T.transfer_to
FROM transfer AS T INNER JOIN warehouse AS WH
ON T.transfer_from = WH.wh_id
Run Code Online (Sandbox Code Playgroud)

这只给出transfer_from的名称而不是transfer_to.我需要一个类似的查询,但我的SQL专业水平很低,我只是不知道如何处理这个问题.非常感谢任何指导.

sql sql-server

0
推荐指数
1
解决办法
46
查看次数

标签 统计

sql ×2

asp.net ×1

sql-server ×1

sql-server-2005 ×1