Я вижу, что многие люди используют подзапросы или иначе определенные для поставщика функции, чтобы сделать это, но я часто делаю этот вид запроса без подзапросов следующим образом. Это использует плоскость, стандартный SQL, таким образом, это должно работать в любом бренде RDBMS.
SELECT t1.*
FROM mytable t1
LEFT OUTER JOIN mytable t2
ON (t1.UserId = t2.UserId AND t1."Date" < t2."Date")
WHERE t2.UserId IS NULL;
, Другими словами: выберите строку от t1
, где никакая другая строка не существует с тем же UserId
и большая Дата.
(я поместил идентификатор "Дата" в разделители, потому что это - зарезервированное слово SQL.)
В случае, если, если t1."Date" = t2."Date"
, удвоение появляется. Обычно таблицы имеют auto_inc(seq)
ключ, например, id
. Постараться не удваиваться может использоваться, следует:
SELECT t1.*
FROM mytable t1
LEFT OUTER JOIN mytable t2
ON t1.UserId = t2.UserId AND ((t1."Date" < t2."Date")
OR (t1."Date" = t2."Date" AND t1.id < t2.id))
WHERE t2.UserId IS NULL;
<час> комментарий Ре от @Farhan:
Вот более подробное объяснение:
внешнее объединение пытается присоединиться t1
к t2
. По умолчанию все результаты t1
возвращаются, и , если существует соответствие в [1 110], оно также возвращается. Если там не идет ни в какое сравнение в [1 111] с данной строкой [1 112], то запрос все еще возвращает строку [1 113] и использует NULL
в качестве заполнителя для всех из [1 115] столбцы. Это, как внешние объединения работают в целом.
прием в этом запросе должен разработать соответствие соединения условию, таким образом, что t2
должен соответствовать тот же userid
, и больше date
. Идея, являющаяся, если строка существует в [1 119], который имеет большее date
, тогда строка в [1 121], она сравнена с [1 138], не может быть самым большим date
для этого userid
. Но если там не идет ни в какое сравнение - т.е. если никакая строка не существует в [1 124] с большим date
, чем строка в [1 126] - мы знаем, что строка в [1 127] была строкой с самым большим date
для, учитывая [1 129].
В тех случаях (когда там не будет идти ни в какое сравнение), столбцы t2
будут NULL
- даже столбцы, определенные в условии объединения. Так вот почему мы используем WHERE t2.UserId IS NULL
, потому что мы ищем случаи, где никакая строка не была найдена с большим date
для, учитывая [1 134].
Я закончил этот курс в прошлом семестре :)
ИМХО, лучший способ сделать это - создать оценщик выражений. создайте простейший оценщик выражений, который вы можете.
Затем добавьте эти функции в любом порядке:
1 - постоянные символы, просто заполнители для переменных. ваш оценщик должен запросить их значения после анализа выражения.
2 - переменные императивного стиля. Подобно переменным в любом императивном языке, где пользователь может изменить значение символа в любом месте кода.
3 - простые управляющие операторы. 'if-else' и цикл pretest while являются простыми для рассмотрения.
4 - массивы. если вы действительно хотите, чтобы ваш вычислитель выражений действительно походил на язык программирования. Было бы интересно, если бы вы добавили в свой «язык» массивы переменных измерений. вам нужно создать общую функцию отображения для ваших массивов .
Теперь у вас есть настоящий язык программирования. Чтобы быть полезным, вы можете добавить подпрограммы. Итак, список непрерывный:
5 - подпрограммы. Это немного сложнее, чем предыдущие возможности, но это не должно быть невозможным :)
6 - создайте простую математическую библиотеку для вашего нового языка на своем языке! и это, на мой взгляд, самое интересное;)
Книга Себеста - хорошая книга для обзора известных императивных языков программирования.
Написание компилятора для C или Pascal, вероятно, займет у вас месяцы или годы, если вы не гуру компиляторов.
Напишите простой веб-сервер. Это будет весело и может оказаться полезным в качестве простого и бесплатного решения. Однажды я встретил парня, который сказал, что делал что-то подобное и использовал для простых сайтов клиентов. Ваш тоже может стать полезным.
Интернет - это обширная область для работы с языками. Взгляните на популярный веб-фреймворк, такой как Ruby on Rails, и вы обнаружите, что большая часть его продуктивности связана с тем, что он реализует предметно-ориентированный язык , хорошо подходящий для веб-приложений. Ruby оказался хорошим языком для реализации такого языка из-за его динамической природы, но сила исходит от языка, который они создали из него.
В вашем случае, возможно, вы могли бы попробовать разработать свой собственный предметно-ориентированный язык, используя знакомый вам язык, такой как PHP, для реализации основного ядра веб-фреймворка:
Если вы хотите обрабатывать язык, вы можете выполнить программу UIMA. UIMA означает Архитектура управления неструктурированной информацией, он был разработан IBM стоимостью около 45 миллионов долларов и теперь доступен с открытым исходным кодом. В основном UIMA - это кодеки ascii для анализа текстовых документов на поиск закономерностей. Он предназначен для поиска вещей, в которых нет порядка (поиск иголок в стогах сена). Он использует XML и C.
Что-то, над чем может быть интересно поработать, - это регулярное выражение для автоматизации, использующее
Это не очень долгое задание, поэтому вы сможете справиться с ним через несколько месяцев
Here's something I'd love: a PHP-based LaTeX-to-MathML translator. It wouldn't have to do everything, but if I could just cut-and-paste mathematical formulas written in valid LaTeX code into a window and have the script parse it and convert it into valid MathML, that'd be awesome.
Let me expand on this some more. The current state of scientific publishing on the web isn't great. Titles, headers, section numbers, tables, etc. can all be done in HTML, but for mathematical and chemical formulas which depend on precise two-dimensional formatting, scientific authors have only second-class options:
Moreover, neither of these options allow for mathematical formulas to be generated programmatically, which would be helpful to the education community (think randomly-generated online homework).
Publishing scientific work in MathML would solve all of these issues, but it has a few of issues of its own, namely:
In other words: scientific authors know LaTeX, they use it daily, it's the de facto standard for authoring scientific content. MathML isn't and won't ever be the way math and science is authored, but it's the only semantically rich way to put hypertext mathematics on the web. Browser support for MathML is weak because nobody uses it; nobody uses it because it's too hard to write by hand. Now, maybe this is wishful thinking, but I have to believe that if it were only easier to write MathML, more scientists and mathematicians, especially the early-adopter types, would at least try it, and this would inspire browsers (especially open-source browsers) to improve their support, which would then lead to more authors using it, etc.
Here's where the translator comes in: Until the barrier-to-entry for MathML drops, it'll never be widely adopted. A simple LaTeX-to-MathML converter would take care of that. It would reduce the barrier-to-entry for MathML to near zero. If it leads to widespread use of and better support for MathML, it would be a major benefit to the scientific and education communities.
Вы не должны просматривать создание реализация конкретного языка как несущественная. Наверное, каждый хочет быть известным программистом, но немногие достигают этого. Это прекрасная возможность познакомиться с очень крутыми необычными языками. (Lisp, APL и т. Д.). Если вы впервые создаете компилятор / интерпретатор, то также будет лучшим выбором использовать уже существующий язык (чтобы вы могли видеть, какие элементы дизайна необходимы для создания успешного языка. )
Важные идеи обычно возникают по необходимости. Люди начали использовать язык, потому что либо он им был нужен, либо им было намного проще выполнить задачу, которую они хотели выполнить. Не думаю, что здесь вы найдете ответ или мотивацию начать проект с нуля. При этом я всегда думал, что было бы здорово иметь язык, который использует собственный байтовый код процессора для создания динамических веб-сайтов (без использования чего-то вроде cgi).
Я всегда думал, что было бы здорово иметь язык, который использует собственный байтовый код процессора для создания динамических веб-сайтов (без использования чего-то вроде cgi). Я всегда думал, что было бы здорово иметь язык, который использует собственный байтовый код процессора для создания динамических веб-сайтов (без использования чего-то вроде cgi).Я бы отказался от PHP и MySQL для такого проекта. Обе являются коммерческими платформами, которые нарушили многие основные принципы CS, чтобы получить долю рынка и решить проблемы пользователей. Учитывая то, что вы описали, похоже, что цель этого проекта - подумать о том, как обрабатываются языки программирования. Javascript Язык (а не API браузера) может быть здесь хорошим выбором. Написание процессора / интерпретатора / компилятора для Javascript или использование самого Javascript для написания процессора / интерпретатора / компилятора для другого языка соответствовало бы критериям для назначения. Другой возможный проект - написание «минификатора» Javascript, удаляющего все ненужные пробелы (для файлов меньшего размера) при сохранении функциональности программы.
Вы можете попробовать создать скриптовый язык в духе nadvsh, если хотите сделать что-то интересное, но это может быть слишком далеко от того, что ваш инструктор ожидает от вас.
Как раз то, о чем я недавно подумал: напишите интерпретатор Ruby в Лиспе.
Хм, отлично! Возможно:
1.
Интерпретатор языков в сети. например, очень простой интерпретатор ассемблера в javascript или интерпретатор C на основе PHP (скрипт PHP читает код C и выполняет его каким-то образом изолированным способом. Очевидно, что он сможет реализовать только небольшое подмножество C язык)
2.
Может быть, какой-нибудь автоматизированный способ преобразования структур данных PHP (например, массивов PHP) в запросы SQL и наоборот. Подобные вещи уже были сделаны, но вы могли бы сделать что-то, что (например) принимает SQL-запрос и создает структуру данных массива, которая потребуется для «удержания» информация, возвращаемая SQL. Он может поддерживать сложные вещи, такие как JOINS и GROUP BY.
3.
Может быть, компилятор C-to-PHP? (или компилятор PHP-to-C, чтобы иметь возможность запускать простой PHP-код изначально. Используйте это с любой комбинацией языков)
редактировать:
4.
Может быть, парсер регулярных выражений на C. То есть что-то, что принимает регулярное выражение и генерирует код C, соответствующий этому шаблону. Или что-то, что принимает регулярное выражение и преобразует его в конечный автомат, который представляет собой «математический» перевод этого выражения. Или наоборот - что-то, что принимает автомат для CFL и генерирует для него регулярное выражение синтаксиса perl.
5.
Может быть, парсер XML-to-PHP / MySQL. например, файл XML может содержать информацию о базе данных и полях, а затем ваша программа создает SQL для создания этих таблиц или код HTML / PHP для форм.
Почему бы не написать какой-то интерфейс, который можно было бы интерпретировать / скомпилировать до соответствующей веб-технологии по выбору пользователя?
Или что-то вроде компилятора Python в C?
В ответ на ваше редактирование, вот несколько латексных идей:
det = (b * b - 4 * a * c); det_sqrt = sqrt (det); etc
" Как насчет того, что принимает C ( или java или что-то еще), который выполняет серию арифметических присваиваний, и преобразует его в хорошо отформатированный латексный список уравнений, понятных человеку (например, блок \ begin {eqnarray}
)