【问题标题】:Get 2 weeks of data from Database从数据库中获取 2 周的数据
【发布时间】:2012-09-19 13:20:53
【问题描述】:

我要退回最畅销的产品列表。目前,我的查询带回了过去 7 天的订单总额。

我还需要带回前 7 天的商品数量总和,我想知道我将如何去做?我在想它只是在@startDate 上添加 7 天,在 @endDate 上添加 13 天(这已经将日期设置为今天日期之后的 7 天)

当前在 sum(amzOrdersItem.itemQty) AS Orders 行中获取项目数量。这实际上返回了产品订单的计数。

ALTER PROCEDURE [dbo].[GetHighestSellingItems]
@startDate datetime, 
@endDate datetime
AS
BEGIN

SET NOCOUNT ON;

SELECT    TOP (20) twProducts.sku, 
          twProducts.title + ' /  ' + LTRIM(CAST(twProducts.strength AS varchar(15))) + '%' AS Title, 
          sum(amzOrdersItem.itemQty) AS Orders, 
          twProducts.stock, aboProducts.asin, aboProducts.amzPrice
FROM      twProducts INNER JOIN
          amzOrdersItem ON twProducts.sku = amzOrdersItem.productSku INNER JOIN
          amzOrders ON amzOrdersItem.amzOrderId = amzOrders.amzOrderId INNER JOIN
          aboProducts ON twProducts.sku = aboProducts.sku
where    (amzOrders.orderDate between @startDate and @endDate) and  amzOrders.cancelled = 0
          group by twProducts.sku, twProducts.title, twProducts.strength, 
          twProducts.stock, aboProducts.asin, aboProducts.amzPrice
ORDER BY sum(amzOrdersItem.itemQty) DESC
END

认为这可能很方便,这是我正在填充到查询中并获取结果的 .net 代码。

public List<GetHighSelling> GetHighSellingWeek()
    {
        DateTime? endDate = DateTime.Now.Date;
        DateTime? startDate = DateTime.Now.Date.AddDays(-6).Date;

        using (aboDataDataContext dc = new aboDataDataContext())
        {
            var query = from o in dc.GetHighestSellingItems(startDate, endDate)
                        select new GetHighSelling
                        {
                            sku = o.sku,
                            title = o.Title,
                            itemQty = o.Orders,
                            stock = o.stock,
                            amzPrice = o.amzPrice.ToString(),
                            asin = o.asin
                        };
            return query.ToList();
        }
    }

【问题讨论】:

  • 您有什么想问的吗?
  • 这是个问题……“我想知道我将如何去做这件事?”我让它返回过去 7 天的计数,但我也需要它返回前 7 天的计数:)
  • 你了解这段代码吗?
  • 当然是我写的!我的 .net 代码是我的 linq 语句并填充我的表。 SQL 显然正在获取数据。我需要知道的是获取本周前一周数据的最佳方法。我正在考虑在我的查询中将 7 天添加到 @enddate 上。但不确定如何在 SQL 中执行此操作。或者是否值得在.NET 中这样做。因此,为什么我问,其他人可能知道更好的做事方式。
  • @thatuxguy:在我看来,您应该在 .NET 代码中这样做。该过程已经可以很好地重复使用,因此您可以获得所需的任何间隔。在 .NET 中,您可以创建另一个向过程发送不同间隔的方法,或者向该方法添加一个参数以告诉它您想要获得几周前。

标签: sql sql-server-2008


【解决方案1】:

把代码改成

 DateTime startDate = DateTime.Now.Date.AddDays(-13).Date;

【讨论】:

  • 所以用两个不同的参数(-13到-7),(-6到0)调用它两次
  • 并使它们在我的存储过程中可以为空。我认为这是最好的选择
【解决方案2】:

您应该减去 7 天。如果加上 7 天,您将要求未来一周内销量最高的产品。

(虽然这将是非常有用的信息,但数据库无法预见未来。;)

您可以从结束日期计算开始日期:

DateTime? endDate = DateTime.Today.AddDays(-7);
DateTime? startDate = endDate.AddDays(-6);

【讨论】:

  • 不确定我在哪里说我想要未来的计数,我要求的是以前的计数。过去 7 天我已经完成了,我现在需要在这 7 天之前的 7 天,哈哈 :)
  • @thatuxguy:我的意思是你的查询会要求未来的记录。
  • @thatuxguy:是的。由于查询是获取从一周前到现在的记录,因此在日期上添加 7 天将获取从现在到未来一周的记录。
  • 哈哈,我明白你的意思了
猜你喜欢
  • 2021-06-13
  • 2018-01-27
  • 2010-10-09
  • 2013-08-29
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 2020-04-16
相关资源
最近更新 更多