У меня есть таблица записей истории. Одно поле [добавлено] имеет тип данных datetime. То, что я пытаюсь сделать, это выбрать пользователей 20 самых последних записей, но затем сгруппировать их по строке, полученной из поля [добавлено]. Скажите, что его значение было 2011-05-24 03:32:57.353
, строка 'Tuesday, May 24, 2011'
. Я хочу сгруппировать записи по этой строке, но затем упорядочить дочерние узлы по фактическому времени. Я также хочу немного пользовательского вывода XML.
<ActivityHistory>
<Actvities foo="Tuesday, May 24, 2011">
<Activity id="10000" bar="zoo" bam="2011-05-24 03:32:57.353" />
<Activity id="10001" bar="zoo" bam="2011-05-24 03:31:57.353" />
<Activity id="10002" bar="zoo" bam="2011-05-24 03:28:57.353" />
<Activity id="10003" bar="zoo" bam="2011-05-24 03:21:57.353" />
</Activities>
<Actvities foo="Monday, May 23, 2011">
<Activity id="9990" bar="zoo" bam="2011-05-23 03:32:57.353" />
<Activity id="9989" bar="zoo" bam="2011-05-23 03:31:57.353" />
<Activity id="9988" bar="zoo" bam="2011-05-23 03:28:57.353" />
<Activity id="9987" bar="zoo" bam="2011-05-23 03:21:57.353" />
</Activities>
<Actvities foo="Sunday, May 22, 2011">
<Activity id="9900" bar="zoo" bam="2011-05-22 03:32:57.353" />
<Activity id="9899" bar="zoo" bam="2011-05-22 03:31:57.353" />
<Activity id="9898" bar="zoo" bam="2011-05-22 03:28:57.353" />
<Activity id="9897" bar="zoo" bam="2011-05-22 03:21:57.353" />
</Activities>
</ActivityHistory>
Эта полезная нагрузка всегда будет содержать только 0-20 записей. Скорее всего, всегда будет 20.
Пока мой запрос выглядит так.
SELECT TOP 20
fnHistoryGroupingText(Added) [@foo]
FROM ActivityHistory
WHERE MricId = 1
GROUP BY fnHistoryGroupingText(Added)
FOR XML PATH ('Activities'), ROOT ('ActivityHistory')
Он производит XML, похожий на то, что я ищу.
<ActivityHistory>
<Activities foo="Friday, May 20, 2011" />
<Activities foo="Monday, May 23, 2011" />
<Activities foo="Saturday, May 21, 2011" />
<Activities foo="Sunday, May 22, 2011" />
<Activities foo="Tuesday, May 24, 2011" />
</ActivityHistory>
Обратите внимание, что это не отсортированная дата и отсутствие дочерних узлов. Я бы хотел, чтобы они были отсортированы в обратном хронологическом порядке. Я нарочно исключил некоторые поля из запроса, так как на этом этапе запроса я как бы получаю структуру, которую в конечном итоге хочу получить. Когда я представлю другие поля, XML далеко не так. Группировка текста - это varchar и не очень хорошо подходит для свидания. Я могу как-то использовать поле [добавлено], но когда я включаю его в запрос, оно разрушает мою группировку. Кто-нибудь может указать мне правильное направление, чтобы исправить эти проблемы? [A] Напишите запрос правильно и [B] Покажите мне, как правильно выводить искомый XML.