2015-01-20 2 views
-1

У меня есть 3 таблицы, которые объединены вместе с этим запросом. Один из них приносит мне имена людей, другой приносит мне свои очки, а последний приносит мне дату.SELECT Specefic Дата в Tsql Query?

Я выбираю общий счет людей.

Также есть столбец в 3-х таблицах, который приносит мне транзакции с оценками Date Time. Моя проблема заключается в том, что я хочу написать запрос TSQL с этим условием:

Выберите дату транзакции, в которой люди набрали 12 000 и более.

В моей идее я должен использовать цикл while, но я не знаю синтаксиса?

enter image description here

+0

Вы должны в то время как ??? Что это значит? Вы пытаетесь выполнить общее количество и хотите знать дату, когда общий балл превышает определенное значение? Какая версия sql-сервера? –

+0

извините, я отредактировал мой вопрос – salar

+0

Какая версия sql-сервера? Вот несколько способов получить итоговые итоги. Цикл while не является хорошим выбором. http://sqlperformance.com/2014/01/t-sql-queries/grouped-running-totals –

ответ

1

Основываясь на своем посту, это должно быть близко к тому, что вам нужно. Вам нужно добавить эту третью таблицу и соответственно изменить ее.

SELECT cp.FirstName 
    , cp.LastName 
    , SUM(Points) as Score 

    FROM [fidilio].[dbo].[ClubProfile] cp 
     RIGHT JOIN ( 
      CardTransaction ct 
       INNER JOIN CardTransactionLog ctl 
        ON cp.CardTransactionLogId = ctl.CardTransactionLogId 
      ) 
      ON cp.ClubProfileId = ct.ClubProfileId 
    GROUP BY 
      cp.FirstName 
     , cp.LastName 

    HAVING SUM(Points) >=12000 
     AND ctl.TransactionTimeStamp = @SomeDateTimeVariable 

Переменная @SomeDateTimeVariable должен прийти откуда-то, что ваши точные критерии времени каркасные

+0

Спасибо @fnostro, моя проблема в том, что я могу выбрать дату, когда HAVING SUM (Points)> = 12000 – salar

+0

- это поле datetime, связанное с каждым CardTransaction или с человеком? – fnostro

+0

это связано с транзакцией карты – salar

2

Это, как я хотел бы сделать IT-

SELECT cp.FirstName 
, cp.LastName 
, SUM(Points) as Score 
FROM ClubProfile cp 
    RIGHT JOIN CardTransaction ct 
     ON cp.ClubProfileId = ct.ClubProfileId 
    INNER JOIN Your3rdTable as t3 
     ON cp.ClubProfileId = t3.ClubProfileId 
WHERE CONVERT(VARCHAR, ct.[Date Column], 101) = @your_date_param 
GROUP BY 
     cp.FirstName 
    , cp.LastName 
HAVING SUM(Points) >=12000 
+0

Спасибо @briskovich, не могли бы вы объяснить мне, что такое your_date_param – salar

+0

Да, на какую дату вы хотите фильтровать. Так же, как CONVERT (VARCHAR, ct. [Date Column], 101) = '01/15/2015 'или любую другую дату, которую вы выберете. – briskovich

+0

спасибо, но моя проблема в том, что я хочу выбрать дату времени. Дата, когда сумма (точка) больше 12000 – salar