Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回每个常用组的最新日期_Sql_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

Sql 返回每个常用组的最新日期

Sql 返回每个常用组的最新日期,sql,sql-server-2008,sql-server-2005,Sql,Sql Server 2008,Sql Server 2005,使用SQL Server 2005/2008和此查询: DECLARE @FromDate DATETIME, @Todate DATETIME SET @FromDate = '1/1/2012' SET @Todate = '1/1/2013' SELECT CASE WHEN (GROUPING(s.storeid)=1) THEN 'Total' ELSE s.storeid END AS Store, CAST(SUM(p.amount) AS DECIMAL(12

使用SQL Server 2005/2008和此查询:

DECLARE @FromDate DATETIME, @Todate DATETIME

SET @FromDate = '1/1/2012'
SET @Todate = '1/1/2013'

SELECT
    CASE WHEN (GROUPING(s.storeid)=1) THEN 'Total' ELSE s.storeid END AS Store,
    CAST(SUM(p.amount) AS DECIMAL(12,2)) AS Paid,
    CAST((SELECT 
            TOP 1 s.TRSDate 
        FROM 
            RPTrs s, 
            rpPay p 
        WHERE 
            s.StoreID = p.StoreID AND 
            s.ReceiptNO = p.ReceiptNo 
        ORDER BY 
            s.TRSDate DESC) AS DATETIME) AS LastTransaction
FROM 
    rptrs s, rppay p
WHERE 
    s.ReceiptNO = p.ReceiptNo AND 
    s.StoreID = p.StoreID AND 
    s.TRSDate >= @FromDate AND 
    s.TRSDate <= @Todate
GROUP BY 
    s.StoreID
WITH ROLLUP
情况。此查询返回每个商店的总金额和总金额。除此之外,我现在需要添加的是显示的存储中发生的最后一个事务。由于日期范围介于2012年1月1日和2013年1月1日之间,因此在Store 2中发生的最后一笔交易就是预期结果中的交易。商店1在另一时间进行了最后一笔交易

第一个表是RPTR,第二个表是rpPay

问题-我如何获得预期结果

根据你提供的样品。试试这个。您需要根据您的需求和数据对其进行一些修改


我能解决问题的一半

DECLARE @FromDate DATETIME, @Todate DATETIME

SET @FromDate = '1/1/2012'
SET @Todate = '1/1/2013'

SELECT
    CASE WHEN (GROUPING(s.storeid)=1) THEN 'Total' ELSE s.storeid END AS Store,
    CAST(SUM(p.amount) AS DECIMAL(12,2)) AS Paid,
    CASE WHEN (GROUPING(s.StoreID)=1) THEN null ELSE CAST(MAX(s.TRSDate) AS DATETIME) END AS LastTransaction
FROM 
    rptrs s, rppay p
WHERE 
    s.ReceiptNO = p.ReceiptNo AND 
    s.StoreID = p.StoreID AND 
    s.TRSDate >= @FromDate AND 
    s.TRSDate <= @Todate
GROUP BY 
    s.StoreID
WITH ROLLUP
声明@FromDate DATETIME,@Todate DATETIME
设置@FromDate='1/1/2012'
设置@Todate='1/1/2013'
挑选
当(分组(s.storeid)=1)然后“总计”其他s.storeid结束为Store时,
已支付的铸造(金额(p.金额)为十进制(12,2)),
当(分组(s.StoreID)=1)然后null ELSE CAST(MAX(s.TRSDate)作为日期时间)作为LastTransaction结束时的情况
从…起
RPTS,RPP
哪里
s、 接收编号=p.接收编号和
s、 StoreID=p.StoreID和
s、 TRSDate>=@FromDate和

s、 TRSDate对我有效的最终答案:

DECLARE @FromDate DATETIME, @Todate DATETIME

SET @FromDate = '1/1/2012'
SET @Todate = '1/1/2013'

SELECT
    CASE WHEN (GROUPING(s.storeid)=1) THEN 'Total' ELSE s.storeid END AS Store,
    CAST(SUM(p.amount) AS DECIMAL(12,2)) AS Paid,
    ISNULL(CONVERT(VARCHAR(50),(CASE WHEN (GROUPING(s.StoreID)=1) THEN null ELSE CAST(MAX(s.TRSDate) AS DATETIME) END)), '')AS LastTransaction
FROM 
    rptrs s, rppay p
WHERE 
    s.ReceiptNO = p.ReceiptNo AND 
    s.StoreID = p.StoreID 
GROUP BY 
    s.StoreID
WITH ROLLUP

如果你的范围是从2012年1月1日到2013年1月1日,那么为什么2013年3月6日(或者是6月3日?)会再次出现?难道你不会只期待2012年的数据吗?如果你展示一些样本数据,让我们知道这些结果是如何得出的,它可能会给我们足够的信息来编写更好的查询。很难解决这个问题,因为我们知道你尝试了什么,得到了什么,但不知道它来自哪里。@AaronBertrand-在“问题”之前检查更新的文本@AaronBertrand-使用表中的样本数据更新post与我得到的结果完全相同。如果您可以发布一些样本数据,这将非常有用。在语句尝试时,将“”而不是null放在您的case上,它返回
1900-01-01 00:00:00.000
ISNULL(case when(GROUPING(s.StoreID)=1),然后将null ELSE转换为(MAX(s.TRSDate)as DATETIME)END',)由于LastTransactionStill返回的是
1900-01-01 00:00:00.000
,而您的另一个答案很好,只是它必须有一个日期为空的总数
DECLARE @FromDate DATETIME, @Todate DATETIME

SET @FromDate = '1/1/2012'
SET @Todate = '1/1/2013'

SELECT
    CASE WHEN (GROUPING(s.storeid)=1) THEN 'Total' ELSE s.storeid END AS Store,
    CAST(SUM(p.amount) AS DECIMAL(12,2)) AS Paid,
    CASE WHEN (GROUPING(s.StoreID)=1) THEN null ELSE CAST(MAX(s.TRSDate) AS DATETIME) END AS LastTransaction
FROM 
    rptrs s, rppay p
WHERE 
    s.ReceiptNO = p.ReceiptNo AND 
    s.StoreID = p.StoreID AND 
    s.TRSDate >= @FromDate AND 
    s.TRSDate <= @Todate
GROUP BY 
    s.StoreID
WITH ROLLUP
DECLARE @FromDate DATETIME, @Todate DATETIME

SET @FromDate = '1/1/2012'
SET @Todate = '1/1/2013'

SELECT
    CASE WHEN (GROUPING(s.storeid)=1) THEN 'Total' ELSE s.storeid END AS Store,
    CAST(SUM(p.amount) AS DECIMAL(12,2)) AS Paid,
    ISNULL(CONVERT(VARCHAR(50),(CASE WHEN (GROUPING(s.StoreID)=1) THEN null ELSE CAST(MAX(s.TRSDate) AS DATETIME) END)), '')AS LastTransaction
FROM 
    rptrs s, rppay p
WHERE 
    s.ReceiptNO = p.ReceiptNo AND 
    s.StoreID = p.StoreID 
GROUP BY 
    s.StoreID
WITH ROLLUP